Go (Golang) में JSON प्रोसेसिंग: पूर्ण गाइड
\n\nGo (Golang) एक आधुनिक कंपाइल्ड प्रोग्रामिंग भाषा है जिसे Google में विकसित किया गया है। इसकी मजबूत विशेषताओं में से एक मानक पैकेज encoding/json के माध्यम से JSON प्रारूप के लिए अंतर्निहित समर्थन है। कई अन्य भाषाओं के विपरीत, जहां तृतीय-पक्ष लाइब्रेरी स्थापित करने की आवश्यकता होती है, Go में JSON प्रोसेसिंग "आउट ऑफ द बॉक्स" उपलब्ध है और उच्च प्रदर्शन और सख्त टाइपिंग द्वारा प्रतिष्ठित है।
इस लेख में, हम Go में JSON के साथ काम करने के सभी पहलुओं पर विस्तार से चर्चा करेंगे: सरल पार्सिंग से लेकर कस्टम टाइप और स्ट्रीम प्रोसेसिंग के साथ जटिल परिदृश्यों तक।
\n\nमूल बातें: JSON को एन्कोड और डिकोड करना
\n\nपैकेज encoding/json दो मुख्य फ़ंक्शन प्रदान करता है: Go स्ट्रक्चर को JSON में सीरियलाइज़ करने के लिए json.Marshal() और JSON को वापस स्ट्रक्चर में डीसीरियलाइज़ करने के लिए json.Unmarshal()।
उदाहरण: स्ट्रक्चर को JSON में सीरियलाइज़ करना
\n\npackage main\n\nimport (\n "encoding/json"\n "fmt"\n)\n\ntype User struct {\n Name string `json:"name"`\n Age int `json:"age"`\n Email string `json:"email,omitempty"`\n}\n\nfunc main() {\n user := User{\n Name: "इवान पेत्रोव",\n Age: 30,\n Email: "ivan@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":"ivan@example.com"}\n}\n\nउदाहरण: JSON को स्ट्रक्चर में डीसीरियलाइज़ करना
\n\nfunc main() {\n jsonString := `{"name":"अन्ना स्मिर्नोवा","age":25,"email":"anna@example.com"}`\n \n var user User\n err := json.Unmarshal([]byte(jsonString), &user)\n if err != nil {\n fmt.Println("डीसीरियलाइज़ेशन त्रुटि:", err)\n return\n }\n\n fmt.Printf("नाम: %s, आयु: %d, ईमेल: %s\\n", user.Name, user.Age, user.Email)\n}\n\nस्ट्रक्चर टैग (Struct Tags)
\n\nGo में स्ट्रक्चर टैग आपको यह नियंत्रित करने की अनुमति देते हैं कि फ़ील्ड JSON में कैसे सीरियलाइज़ होंगे। यह फ़ील्ड नामों को अनुकूलित करने, खाली मानों को छोड़ने और अन्य विकल्पों के लिए एक शक्तिशाली तंत्र है।
\n\nटैग के मुख्य विकल्प:
\n\n- \n
json:"name"— JSON में फ़ील्ड का नाम सेट करता है \n json:"-"— फ़ील्ड को JSON से पूरी तरह से बाहर करता है \n json:"name,omitempty"— यदि फ़ील्ड में शून्य मान (0, "", false, nil) है तो उसे छोड़ देता है \n json:"name,string"— संख्यात्मक फ़ील्ड को स्ट्रिंग में बदलने के लिए बाध्य करता है \n
विभिन्न टैग के साथ उदाहरण:
\n\ntype Product struct {\n ID int `json:"id"`\n Title string `json:"title"`\n Description string `json:"description,omitempty"`\n Price float64 `json:"price,string"`\n SecretKey string `json:"-"`\n}\n\nfunc main() {\n product := Product{\n ID: 101,\n Title: "लैपटॉप",\n Description: "",\n Price: 899.99,\n SecretKey: "sk-12345",\n }\n\n jsonData, _ := json.MarshalIndent(product, "", " ")\n fmt.Println(string(jsonData))\n // आउटपुट:\n // {\n // "id": 101,\n // "title": "लैपटॉप",\n // "price": "899.99"\n // }\n}\n\nमनमाने JSON डेटा के साथ काम करना (interface{})
\n\nकभी-कभी JSON डेटा की संरचना पहले से ज्ञात नहीं होती है। ऐसे मामलों में, आप interface{} या map[string]interface{} प्रकार का उपयोग कर सकते हैं।
func main() {\n jsonString := `{"name":"टेस्ट","values":[1,2,3],"active":true,"metadata":{"version":2}}`\n \n var data map[string]interface{}\n err := json.Unmarshal([]byte(jsonString), &data)\n if err != nil {\n fmt.Println("त्रुटि:", err)\n return\n }\n\n // टाइप कास्टिंग के साथ मानों तक पहुंच\n name := data["name"].(string)\n values := data["values"].([]interface{})\n