Go (Golang) में JSON प्रोसेसिंग: मानक लाइब्रेरी से लेकर उन्नत टूल्स तक
JSON (JavaScript Object Notation) डेटा आदान-प्रदान के सबसे लोकप्रिय फॉर्मेट में से एक है। Go (Golang) में, शक्तिशाली मानक लाइब्रेरी encoding/json और कई तृतीय-पक्ष टूल्स के कारण JSON के साथ काम करना उच्च स्तर पर लागू किया गया है, जो विकास को गति और सरल बनाते हैं। इस लेख में, हम विस्तार से समझेंगे कि Go में JSON को कैसे सीरियलाइज़, डीसीरियलाइज़, वैलिडेट और ऑप्टिमाइज़ किया जाए, साथ ही लोकप्रिय लाइब्रेरीज़ पर भी चर्चा करेंगे जो हर Go डेवलपर को जाननी चाहिए।
मानक लाइब्रेरी encoding/json
encoding/json Go का एक अंतर्निहित पैकेज है जो JSON के साथ काम करने के लिए सभी आवश्यक फ़ंक्शन प्रदान करता है। मुख्य विशेषताएं:
- मार्शलिंग (सीरियलाइज़ेशन) — Go स्ट्रक्चर को JSON स्ट्रिंग में बदलना।
- अनमार्शलिंग (डीसीरियलाइज़ेशन) — JSON स्ट्रिंग को Go स्ट्रक्चर में पार्स करना।
- स्ट्रीम प्रोसेसिंग — स्ट्रीम से JSON पढ़ना/लिखना (
io.Reader,io.Writer)। - स्ट्रक्चर टैग — फ़ील्ड नाम प्रबंधन, खाली मान छोड़ना, नेस्टिंग।
मार्शलिंग और अनमार्शलिंग का उदाहरण
package main
import ( "encoding/json" "fmt" "log")
type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` IsActive bool `json:"is_active"`}
func main() { // मार्शलिंग (स्ट्रक्चर -> JSON) user := User{ID: 1, Name: "एलेक्सी", Email: "alex@example.com", IsActive: true} jsonData, err := json.Marshal(user) if err != nil { log.Fatal(err) } fmt.Println(string(jsonData)) // आउटपुट: {"id":1,"name":"एलेक्सी","email":"alex@example.com","is_active":true}
// अनमार्शलिंग (JSON -> स्ट्रक्चर) jsonStr := `{"id":2,"name":"मारिया","email":"maria@example.com","is_active":false}` var user2 User err = json.Unmarshal([]byte(jsonStr), &user2) if err != nil { log.Fatal(err) } fmt.Printf("%+v", user2) // आउटपुट: {ID:2 Name:मारिया Email:maria@example.com IsActive:false}}असंरचित डेटा के साथ काम करना
कभी-कभी JSON की संरचना पहले से ज्ञात नहीं होती है। ऐसे मामलों में, map[string]interface{} या interface{} का उपयोग किया जा सकता है:
func main() { jsonStr := `{"name":"इवान","age":30,"hobbies":["पढ़ना","खेल"]}` var data map[string]interface{} err := json.Unmarshal([]byte(jsonStr), &data) if err != nil { log.Fatal(err) } fmt.Println(data["name"]) // इवान fmt.Println(data["hobbies"].([]interface{})[0]) // पढ़ना}लोकप्रिय तृतीय-पक्ष लाइब्रेरीज़
हालांकि encoding/json अधिकांश कार्यों को कवर करता है, उच्च-लोड सिस्टम या विशिष्ट परिदृश्यों के लिए विकल्पों पर विचार करना उचित है:
1. easyjson
easyjson तेज़ सीरियलाइज़ेशन/डीसीरियलाइज़ेशन के लिए कोड जनरेटर है। यह आपके स्ट्रक्चर के लिए ऑप्टिमाइज़्ड फ़ंक्शन बनाता है, जो मानक लाइब्रेरी की तुलना में 2-5 गुना प्रदर्शन लाभ देता है।
easyjsonके माध्यम से कोड जनरेशन की आवश्यकता होती है।- कस्टम टाइप और नेस्टिंग को सपोर्ट करता है।
- उच्च RPS वाले माइक्रोसर्विसेज के लिए आदर्श।
//go:generate easyjson -all user.gotype User struct { ID int `json:"id"` Name string `json:"name"`}
// जनरेशन के बाद उपयोग करें: user.MarshalJSON() / user.UnmarshalJSON()2. gjson
gjson पूर्ण डीसीरियलाइज़ेशन के बिना तेज़ JSON पढ़ने के लिए लाइब्रेरी है। यह पथ द्वारा मान प्राप्त करने की अनुमति देता है (jq के समान):
import "github.com/tidwall/gjson"
func main() { json := `{"user":{"name":"ओल्गा","age":25}}` name :=