Go में JSON के साथ काम करने का परिचय
\n\nJSON (JavaScript Object Notation) आधुनिक वेब एप्लिकेशन और माइक्रोसर्विसेज में डेटा एक्सचेंज का सबसे लोकप्रिय फॉर्मेट है। अपनी सादगी और पठनीयता के कारण, JSON REST API, कॉन्फ़िगरेशन फ़ाइलों और स्ट्रक्चर्ड डेटा स्टोरेज के लिए मानक बन गया है।
\n\nGo (Golang) भाषा encoding/json पैकेज के माध्यम से JSON के लिए बिल्ट-इन शक्तिशाली सपोर्ट प्रदान करती है। यह पैकेज Go स्ट्रक्चर को JSON (सीरियलाइज़ेशन) और वापस (डीसीरियलाइज़ेशन या पार्सिंग) में आसानी से बदलने की अनुमति देता है।
इस लेख में हम Go में JSON के साथ काम करने की मूल बातें समझेंगे: सरल उदाहरणों से लेकर जटिल नेस्टेड स्ट्रक्चर और एरर हैंडलिंग तक। यह सामग्री शुरुआती डेवलपर्स के लिए है जो Go सिंटैक्स की मूल बातें पहले से जानते हैं।
\n\nसीरियलाइज़ेशन: Go स्ट्रक्चर को JSON में बदलना
\n\nसीरियलाइज़ेशन (एन्कोडिंग) Go के आंतरिक प्रतिनिधित्व (स्ट्रक्चर, स्लाइस, मैप) से डेटा को JSON स्ट्रिंग में बदलने की प्रक्रिया है। Go में इसके लिए json.Marshal() फ़ंक्शन का उपयोग किया जाता है।
सीरियलाइज़ेशन का बेसिक उदाहरण
\n\npackage main\n\nimport (\n "encoding/json"\n "fmt"\n)\n\ntype Person struct {\n Name string\n Age int\n City string\n}\n\nfunc main() {\n person := Person{\n Name: "राहुल शर्मा",\n Age: 30,\n City: "दिल्ली",\n }\n\n jsonBytes, err := json.Marshal(person)\n if err != nil {\n fmt.Println("सीरियलाइज़ेशन में त्रुटि:", err)\n return\n }\n\n fmt.Println(string(jsonBytes))\n // आउटपुट: {"Name":"राहुल शर्मा","Age":30,"City":"दिल्ली"}\n}\n\nध्यान दें: json.Marshal() बाइट्स का स्लाइस ([]byte) लौटाता है, इसलिए हम इसे string() से स्ट्रिंग में बदलते हैं।
json.MarshalIndent के साथ फ़ॉर्मेटेड आउटपुट
\n\nडीबगिंग या पठनीय आउटपुट के लिए json.MarshalIndent() का उपयोग करें:
jsonBytes, err := json.MarshalIndent(person, "", " ")\nif err != nil {\n fmt.Println("त्रुटि:", err)\n return\n}\nfmt.Println(string(jsonBytes))\n// आउटपुट:\n// {\n// "Name": "राहुल शर्मा",\n// "Age": 30,\n// "City": "दिल्ली"\n// }\n\nस्लाइस और मैप का सीरियलाइज़ेशन
\n\nGo न केवल स्ट्रक्चर बल्कि अन्य डेटा प्रकारों को भी सीरियलाइज़ कर सकता है:
\n\n// स्ट्रक्चर का स्लाइस\npeople := []Person{\n {Name: "अंकिता", Age: 25, City: "मुंबई"},\n {Name: "विक्रम", Age: 35, City: "बंगलौर"},\n}\njsonBytes, _ := json.Marshal(people)\nfmt.Println(string(jsonBytes))\n// आउटपुट: [{"Name":"अंकिता","Age":25,"City":"मुंबई"},{"Name":"विक्रम","Age":35,"City":"बंगलौर"}]\n\n// मैप\nscores := map[string]int{"गणित": 95, "भौतिकी": 88, "कंप्यूटर": 92}\njsonBytes, _ = json.Marshal(scores)\nfmt.Println(string(jsonBytes))\n// आउटपुट: {"कंप्यूटर":92,"गणित":95,"भौतिकी":88}\n\nJSON पार्सिंग: JSON को Go स्ट्रक्चर में बदलना
\n\nपार्सिंग (डीसीरियलाइज़ेशन) उल्टी प्रक्रिया है: JSON स्ट्रिंग से हम Go स्ट्रक्चर प्राप्त करते हैं। इसके लिए json.Unmarshal() फ़ंक्शन का उपयोग किया जाता है।
स्ट्रक्चर में पार्सिंग
\n\npackage main\n\nimport (\n "encoding/json"\n "fmt"\n)\n\ntype Person struct {\n Name string\n Age int\n City string\n}\n\nfunc main() {\n jsonString := `{"Name":"राहुल शर्मा","Age":30,"City":"दिल्ली"}`\n\n var person Person\n err := json.Unmarshal([]byte(jsonString), &person)\n if err != nil {\n fmt.Println("पार्सिंग में त्रुटि:", err)\n return\n }\n\n fmt.Printf("नाम: %s, उम्र: %d, शहर: %s\\n", person.Name, person.Age, person.City)\n // आउटपुट: नाम: राहुल शर्मा, उम्र: 30, शहर: दिल्ली\n}\n\nमहत्वपूर्ण: स्ट्रक्चर पर पॉइंटर पास करें (&person), अन्यथा Unmarshal इसके फ़ील्ड को बदल नहीं पाएगा।
map[string]interface{} में पार्सिंग
\n\nयदि डेटा स्ट्रक्चर पहले से ज्ञात नहीं है, तो यूनिवर्सल टाइप का उपयोग करें:
\n\njsonString := `{"name":"अंकिता","