Go में JSON के साथ काम करना: व्यावहारिक रूप से पार्सिंग और सीरियलाइज़ेशन
\n\nJSON (JavaScript Object Notation) वेब डेवलपमेंट में डेटा आदान-प्रदान के सबसे लोकप्रिय फॉर्मेट में से एक है। Go (Golang) भाषा में JSON के साथ काम करना मानक पैकेज encoding/json के माध्यम से कार्यान्वित किया जाता है, जो सीरियलाइज़ेशन (डेटा स्ट्रक्चर को JSON में बदलना) और डीसीरियलाइज़ेशन (JSON को Go स्ट्रक्चर में पार्स करना) के लिए शक्तिशाली और सुविधाजनक उपकरण प्रदान करता है। इस लेख में, हम व्यावहारिक उदाहरणों के साथ विस्तार से समझेंगे कि Go में JSON के साथ कैसे काम करें।
मूल बातें: स्ट्रक्चर का JSON में सीरियलाइज़ेशन
\n\nGo में JSON के साथ काम करने का सबसे सामान्य तरीका टैग वाले स्ट्रक्चर का उपयोग करना है। टैग JSON में फ़ील्ड के नाम निर्धारित करने की अनुमति देते हैं, जो Go में फ़ील्ड के नामों से भिन्न हो सकते हैं। आइए सीरियलाइज़ेशन के एक बुनियादी उदाहरण पर विचार करें:
\n\npackage main\n\nimport (\n "encoding/json"\n "fmt"\n)\n\ntype User struct {\n ID int `json:"id"`\n Name string `json:"name"`\n Email string `json:"email"`\n IsActive bool `json:"is_active"`\n}\n\nfunc main() {\n user := User{\n ID: 1,\n Name: "इवान पेत्रोव",\n Email: "ivan@example.com",\n IsActive: true,\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 // आउटपुट: {"id":1,"name":"इवान पेत्रोव","email":"ivan@example.com","is_active":true}\n}\n\nध्यान दें: हम JSON में कुंजियों के नामों को नियंत्रित करने के लिए टैग json:"फ़ील्ड_का_नाम" का उपयोग कर रहे हैं। यह विशेष रूप से तब उपयोगी होता है जब नामकरण के कुछ मानकों का पालन करना हो (उदाहरण के लिए, JSON में snake_case और Go में CamelCase)।
JSON को Go स्ट्रक्चर में पार्स करना
\n\nJSON डेटा का स्ट्रक्चर में डीसीरियलाइज़ेशन (पार्सिंग) json.Unmarshal फ़ंक्शन का उपयोग करके किया जाता है। यह महत्वपूर्ण है कि स्ट्रक्चर JSON ऑब्जेक्ट की संरचना से मेल खाता हो। आइए अपने उदाहरण को जारी रखें:
func main() {\n jsonString := `{"id":2,"name":"मारिया सिदोरोवा","email":"maria@example.com","is_active":false}`\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("ID: %d, Name: %s, Email: %s, Active: %t\\n",\n user.ID, user.Name, user.Email, user.IsActive)\n // आउटपुट: ID: 2, Name: मारिया सिदोरोवा, Email: maria@example.com, Active: false\n}\n\nमहत्वपूर्ण: json.Unmarshal फ़ंक्शन में हमेशा स्ट्रक्चर का पॉइंटर (&user) पास किया जाता है, अन्यथा परिवर्तन सहेजे नहीं जाएंगे।
नेस्टेड स्ट्रक्चर और ऐरे के साथ काम करना
\n\nवास्तविक JSON डेटा में अक्सर नेस्टेड ऑब्जेक्ट और ऐरे होते हैं। Go नेस्टेड स्ट्रक्चर का उपयोग करके ऐसे मामलों को सुंदर ढंग से संभालने की अनुमति देता है:
\n\ntype Address struct {\n City string `json:"city"`\n Street string `json:"street"`\n ZipCode string `json:"zip_code"`\n}\n\ntype Employee struct {\n ID int `json:"id"`\n Name string `json:"name"`\n Skills []string `json:"skills"`\n Address Address `json:"address"`\n}\n\nfunc main() {\n jsonData := `{\n "id": 101,\n "name": "अलेक्सेई इवानोव",\n "skills": ["Go", "Python", "Docker"],\n "address": {\n "city": "मॉस्को",\n "street": "टावर्सकाया, 10",\n "zip_code": "101000"\n }\n }`\n\n var emp Employee\n err := json.Unmarshal([]byte(jsonData), &emp)\n if err != nil {\n fmt.Println("त्रुटि:", err)\n return\n }\n\n fmt.Printf("कर्मचारी: %s, शहर: %s, कौशल: %v\\n",\n emp.Name, emp.Address.City, emp.Skills)\n // आउटपुट: कर्मचारी: अलेक्सेई इवानोव, शहर: मॉस्को, कौशल: [Go Python Docker]\n}\n\nGo में ऐरे के लिए स्लाइस ([]string) का उपयोग किया जाता है, और नेस्टेड ऑब्जेक्ट के लिए अलग-अलग स्ट्रक्चर का। ऑब्जेक्ट के JSON ऐरे को पार्स करते समय