Go struct को JSON में कैसे बदलें: शुरुआती से विशेषज्ञ तक
\n\nJSON के साथ काम करना किसी भी Go बैकएंड डेवलपर के लिए रोज़ की रोटी है। लगभग हर दिन आपको क्लाइंट को डेटा भेजना होता है, API से अनुरोध प्राप्त करने होते हैं या कॉन्फ़िगरेशन सहेजने होते हैं। और 90% मामलों में यह JSON ही होता है। लेकिन अपनी मूल struct को पढ़ने योग्य JSON में कैसे बदलें? यह सरल लगता है, है ना? हालांकि, विवरणों में छिपी है असली चुनौती: गलत टैग, खाली फ़ील्ड, भूली हुई त्रुटियाँ — और आपका API वह नहीं लौटाता जो होना चाहिए।
इस लेख में हम Go struct को JSON में बदलने की प्रक्रिया को बुनियादी से लेकर उन्नत तकनीकों तक समझेंगे। आप जानेंगे कि टैग कैसे काम करते हैं, खाली फ़ील्ड को कैसे छिपाएँ, नेस्टेड संरचनाओं को कैसे सीरियलाइज़ करें और त्रुटियों से कैसे बचें। चलिए शुरू करते हैं!
\n\nमूल बातें: encoding/json पैकेज
\n\nGo की मानक लाइब्रेरी में एक शक्तिशाली पैकेज encoding/json है। इसके मुख्य उपकरण हैं json.Marshal (struct को JSON में बदलने के लिए) और json.Unmarshal (विपरीत प्रक्रिया के लिए) फ़ंक्शन।
आइए एक बुनियादी उदाहरण देखें। हमारे पास एक उपयोगकर्ता संरचना है:
\n\npackage main\n\nimport (\n "encoding/json"\n "fmt"\n)\n\ntype User struct {\n Name string\n Age int\n Email string\n}\n\nfunc main() {\n user := User{\n Name: "एलेक्सी",\n Age: 30,\n Email: "alex@example.com",\n }\n\n jsonData, err := json.Marshal(user)\n if err != nil {\n fmt.Println("त्रुटि:", err)\n return\n }\n\n fmt.Println(string(jsonData))\n // आउटपुट: {"Name":"एलेक्सी","Age":30,"Email":"alex@example.com"}\n}\n\nसब कुछ काम करता है, लेकिन एक बारीकी है: JSON में कुंजियाँ संरचना के फ़ील्ड नामों (बड़े अक्षरों में) से मेल खाती हैं। और यह JSON मानकों के अनुरूप नहीं है (आमतौर पर camelCase या snake_case का उपयोग किया जाता है)।
\n\nJSON टैग: कुंजी नामों पर नियंत्रण
\n\nयह नियंत्रित करने के लिए कि फ़ील्ड JSON में कैसे दिखाई देंगे, स्ट्रक्चर टैग का उपयोग किया जाता है। ये विशेष एनोटेशन हैं जो फ़ील्ड प्रकार के बाद बैकटिक में लिखे जाते हैं।
\n\ntype User struct {\n Name string `json:"name"`\n Age int `json:"age"`\n Email string `json:"email"`\n}\n\n// अब आउटपुट होगा:\n// {"name":"एलेक्सी","age":30,"email":"alex@example.com"}\n\nटैग एक साथ कई समस्याओं का समाधान करते हैं:
\n- \n
- फ़ील्ड नाम बदलना — कुंजियों को सुंदर और पढ़ने योग्य बनाता है \n
- फ़ील्ड छोड़ना —
json:"-"के साथ फ़ील्ड पूरी तरह से JSON से हटा दिया जाता है \n - खाली फ़ील्ड प्रबंधन —
omitemptyविकल्प फ़ील्ड को छिपाता है यदि उसमें शून्य मान है \n
omitempty के साथ व्यावहारिक उदाहरण
\n\ntype User struct {\n Name string `json:"name"`\n Age int `json:"age,omitempty"`\n Email string `json:"email,omitempty"`\n IsAdmin bool `json:"is_admin,omitempty"`\n}\n\nfunc main() {\n user := User{Name: "मारिया"}\n jsonData, _ := json.Marshal(user)\n fmt.Println(string(jsonData))\n // आउटपुट: {"name":"मारिया"}\n // Age, Email और IsAdmin छोड़ दिए गए क्योंकि वे खाली हैं\n}\n\nध्यान दें: omitempty शून्य मानों के लिए काम करता है — 0, false, खाली स्ट्रिंग, nil। यह API के लिए बहुत उपयोगी है जहाँ अनावश्यक फ़ील्ड नहीं ले जानी होतीं।
नेस्टेड संरचनाएँ और स्लाइस
\n\nवास्तविक प्रोजेक्ट्स में डेटा शायद ही कभी सपाट होता है। अक्सर आपके पास नेस्टेड ऑब्जेक्ट या ऐरे होते हैं। Go इसे बखूबी संभालता है — json पैकेज सभी फ़ील्ड को पुनरावर्ती रूप से प्रोसेस करता है।
type Address struct {\n City string `json:"city"`\n Street string `json:"street"`\n ZipCode string `json:"zip_code"`\n}\n\ntype Company struct {\n Name string `json:"name"`\n Address Address `json:"address"`\n Tags []string `json:"tags"`\n}\n\nfunc main() {\n company := Company{\n