Go में JSON के साथ काम करने का परिचय
JSON (JavaScript Object Notation) आधुनिक वेब एप्लिकेशन, माइक्रोसर्विसेज और API में डेटा आदान-प्रदान के सबसे लोकप्रिय प्रारूपों में से एक है। Go भाषा (Golang) encoding/json पैकेज के माध्यम से JSON के साथ काम करने के लिए अंतर्निहित शक्तिशाली समर्थन प्रदान करती है। यह पैकेज Go-स्ट्रक्चर और JSON-स्ट्रिंग के बीच डेटा को आसानी से बदलने की अनुमति देता है, साथ ही इसके विपरीत भी।
इस लेख में, हम विस्तार से समझेंगे कि Go में JSON का पार्सिंग (डिसीरियलाइज़ेशन) और सीरियलाइज़ेशन कैसे करें। आप सीखेंगे कि सरल और नेस्टेड स्ट्रक्चर के साथ कैसे काम करें, त्रुटियों को कैसे संभालें और फ़ील्ड नामों को कैसे कॉन्फ़िगर करें। यह सामग्री शुरुआती और अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगी जो अपने ज्ञान को व्यवस्थित करना चाहते हैं।
Go में सीरियलाइज़ेशन (Marshal) की मूल बातें
Go-स्ट्रक्चर को JSON में बदलना
सीरियलाइज़ेशन Go-ऑब्जेक्ट (जैसे स्ट्रक्चर या स्लाइस) को JSON-स्ट्रिंग में बदलने की प्रक्रिया है। इसके लिए json.Marshal() फ़ंक्शन का उपयोग किया जाता है। आइए एक सरल उदाहरण देखें:
package main
import ( "encoding/json" "fmt")
type User struct { Name string Age int Email string}
func main() { user := User{ Name: "इवान पेत्रोव", Age: 30, Email: "ivan@example.com", }
jsonData, err := json.Marshal(user) if err != nil { fmt.Println("सीरियलाइज़ेशन त्रुटि:", err) return }
fmt.Println(string(jsonData))}प्रोग्राम का आउटपुट:
{"Name":"इवान पेत्रोव","Age":30,"Email":"ivan@example.com"}ध्यान दें: JSON में फ़ील्ड के नाम स्ट्रक्चर के फ़ील्ड नामों से मेल खाते हैं। लेकिन अक्सर उन्हें बदलने की आवश्यकता होती है, उदाहरण के लिए, camelCase शैली में। इसके लिए स्ट्रक्चर टैग का उपयोग किया जाता है।
JSON को कॉन्फ़िगर करने के लिए टैग का उपयोग
स्ट्रक्चर टैग यह निर्धारित करने की अनुमति देते हैं कि फ़ील्ड कैसे सीरियलाइज़ होगा। आइए अपने उदाहरण में टैग जोड़ें:
type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"`}अब आउटपुट इस प्रकार होगा:
{"name":"इवान पेत्रोव","age":30,"email":"ivan@example.com"}टैग के मुख्य विकल्प:
json:"field_name"— JSON में फ़ील्ड का नाम सेट करता है।omitempty— यदि फ़ील्ड का शून्य मान है (खाली स्ट्रिंग, 0, false, nil) तो उसे JSON से बाहर कर देता है।-— सीरियलाइज़ेशन/डिसीरियलाइज़ेशन के दौरान फ़ील्ड को पूरी तरह से अनदेखा करता है।
स्लाइस और मैप का सीरियलाइज़ेशन
encoding/json पैकेज न केवल स्ट्रक्चर के साथ, बल्कि स्लाइस, मैप और सरल प्रकारों के साथ भी बढ़िया काम करता है:
// स्ट्रक्चर का स्लाइसusers := []User{ {Name: "अन्ना", Age: 25}, {Name: "बोरिस", Age: 35},}jsonUsers, _ := json.Marshal(users)fmt.Println(string(jsonUsers))// आउटपुट: [{"name":"अन्ना","age":25},{"name":"बोरिस","age":35}]
// मैपdata := map[string]interface{}{ "status": "ok", "count": 42,}jsonMap, _ := json.Marshal(data)fmt.Println(string(jsonMap))// आउटपुट: {"count":42,"status":"ok"}Go में JSON पार्सिंग (Unmarshal)
स्ट्रक्चर में बेसिक पार्सिंग
डिसीरियलाइज़ेशन (पार्सिंग) उल्टी प्रक्रिया है: JSON-स्ट्रिंग को Go-ऑब्जेक्ट में बदलना। इसके लिए json.Unmarshal() फ़ंक्शन का उपयोग किया जाता है। महत्वपूर्ण: लक्ष्य स्ट्रक्चर को एक्सपोर्ट किया जाना चाहिए (बड़े अक्षर वाले फ़ील्ड) या उपयुक्त टैग होने चाहिए।
jsonString := `{"name":"मारिया","age":28,"email":"maria@example.com"}`
var user Usererr := json.Unmarshal([]byte(jsonString), &user)if err != nil { fmt.Println("पार्सिंग त्रुटि:", err) return}
fmt.Printf("नाम: %s, आयु: %d", user.Name, user.Age)// आउटपुट: नाम: मारिया, आयु: 28नेस्टेड स्ट्रक्चर का पार्सिंग
JSON में अक्सर नेस्टेड ऑब्जेक्ट होते हैं।