इसका इस्तेमाल कैसे करें
- JSON ऑब्जेक्ट को JSON ऑब्जेक्ट में चिपकाएँ। पूरा पाठ एक ही ऑब्जेक्ट होना चाहिए, जिसकी शुरुआत { से हो।
- मूल स्ट्रक्ट का नाम लिखें, जैसे Product, और अगर चाहें तो हर टैग में omitempty जोड़ें पर निशान लगाएँ।
- जाँच पढ़ें। हरा मतलब ऑब्जेक्ट बदल गया; लाल दिखाता है कि समस्या कहाँ है।
- Go कोड को पैकेज लाइन वाली फ़ाइल में कॉपी करें, या उसे models.go के रूप में डाउनलोड करें।
Go प्रकार कैसे चुने जाते हैं
हर JSON मान को वह Go प्रकार मिलता है जो उसे रखता है। स्ट्रिंग का प्रकार string है, और true या false का प्रकार bool। JSON को इन प्रकारों में वापस कैसे पढ़ा जाए, यह encoding/json पैकेज के Unmarshal नियमों से तय होता है।
- 64 बिट में समाने वाली पूरी संख्या int64 बनती है। 1.0 या 2e3 जैसी दशमलव या घात वाली संख्या float64 बनती है, और int64 में न समाने वाली बहुत बड़ी पूरी संख्या भी।
- null any बनता है। किसी दूसरे प्रकार के मान के साथ आने वाला null उसी प्रकार को लेता है, क्योंकि null किसी दूसरे प्रकार के Go मान को बिना बदले छोड़ देता है।
- एक ऑब्जेक्ट struct बनता है; एक सूची वह प्रकार लेती है जो उसके आइटम साझा करते हैं। एक सूची के ऑब्जेक्ट एक ही struct में मिल जाते हैं, और मिले-जुले प्रकार की सूची []any बनती है।
- खाली ऑब्जेक्ट खाली struct बनता है, और खाली सूची []any।
नाम, टैग और टकराव
हर फ़ील्ड अपना नाम JSON नाम से लेता है: शब्द जुड़ते हैं और हर शब्द का पहला अक्षर बड़ा होता है, इसलिए user-name बनता है UserName। Go विनिर्देश बड़े अक्षर से शुरू होने वाले नाम को बाहर से दिखने वाला मानता है, इसलिए पहला अक्षर बड़ा होता है। json टैग नाम को वैसा ही रखता है जैसा वह लिखा गया था, ताकि JSON वापस पढ़ते समय वही कुंजी मिले।
एक ही Go नाम देने वाले दो नामों को एक संख्या मिलती है, जैसे AB और AB2, और जो struct नाम पहले से इस्तेमाल हो चुका है उसे भी संख्या मिलती है। सूची के आइटम का नाम उसकी सूची से बनता है: products से struct Product बनता है, और जिस नाम का बहुवचन नियम नहीं है उसके अंत में Item जुड़ता है।
- कोई नाम जिसमें अल्पविराम हो, अकेला डैश हो या कोई अक्षर न हो, json टैग नहीं बन सकता, इसलिए टूल उस कुंजी का नाम लेकर रुक जाता है।
- omitempty चालू होने पर हर टैग में यह विकल्प जुड़ता है। टूल मूल struct नाम का पहला अक्षर बड़ा करता है, जैसे product, Product बनता है।
टूल क्या नहीं करता
- पैकेज लाइन या import नहीं जोड़ता। कोड को अपनी पैकेज लाइन वाली फ़ाइल में चिपकाएँ।
- वैकल्पिक फ़ील्ड के लिए पॉइंटर इस्तेमाल नहीं करता। JSON में जो फ़ील्ड गायब या null है, वह शून्य मान वाले फ़ील्ड से अलग नहीं पहचाना जाता।
- Go के आम संक्षिप्त रूप (initialisms) नहीं लगाता, इसलिए id, Id बनता है। अगर आपकी कोड शैली ID चाहती है तो फ़ील्ड का नाम हाथ से बदलें।
हल किया हुआ उदाहरण: एक मालिक और दो आइटमों वाला ऑर्डर
नीचे दिए JSON में एक पूरी संख्या, एक दशमलव संख्या, एक ऑब्जेक्ट और दो ऑब्जेक्टों की एक सूची है। तालिका दिखाती है कि हर JSON नाम किस Go फ़ील्ड में जाता है। टूल तालिका के नीचे तीन struct लिखता है, जिनमें बाहरी struct Order सबसे पहले है।
| JSON नाम | Go फ़ील्ड | Go प्रकार | टैग |
|---|---|---|---|
| id | Id | int64 | json:"id" |
| ratio | Ratio | float64 | json:"ratio" |
| owner | Owner | Owner | json:"owner" |
| items | Items | []Item | json:"items" |
अक्सर पूछे जाने वाले सवाल
पूरी संख्या int के बजाय int64 क्यों बनती है?
int64 एक तय 64 बिट का साइन वाला पूरा संख्या प्रकार है, जो -9223372036854775808 से 9223372036854775807 तक की हर पूरी संख्या रखता है। टूल हर उस पूरी संख्या के लिए इसे लेता है जो उसमें समाती है, ताकि मान ओवरफ़्लो न हो। अगर आपके कोड को जरूरत हो तो प्रकार हाथ से int कर लें।
null any क्यों बनता है?
Go में अकेले null को रखने वाला कोई प्रकार नहीं है, इसलिए टूल any लेता है, जो कोई भी मान रख सकता है। किसी दूसरे प्रकार के मान के साथ आने वाला null उसी प्रकार को लेता है, क्योंकि encoding/json null पढ़ते समय दूसरे प्रकार के Go मान को नहीं बदलता।
मेरा फ़ील्ड ID के बजाय Id क्यों है?
टूल हर शब्द का पहला अक्षर बड़ा करता है और Go के आम संक्षिप्त रूप लागू नहीं करता, इसलिए id, Id बनता है। json टैग फिर भी id रहता है, इसलिए डेटा उसी तरह पढ़ा जाता है। आपकी कोड शैली ID माँगे तो फ़ील्ड का नाम बदल दें।
कौन-सा Go संस्करण चाहिए?
आउटपुट null के लिए any इस्तेमाल करता है, और any, Go 1.18 में जोड़ा गया interface{} का उपनाम है। अगर आपका कोड पुराने संस्करण पर है तो any की जगह interface{} लिखें; वह वही प्रकार है।
टूल कुछ नाम क्यों स्वीकार नहीं करता?
json टैग में नाम रहता है और उसके विकल्प अल्पविराम के बाद आते हैं, इसलिए अल्पविराम वाला नाम टैग में नहीं लिखा जा सकता। अकेले डैश वाला टैग फ़ील्ड छिपा देता है, इसलिए वह नाम भी स्वीकार नहीं होता।
क्या मेरा चिपकाया JSON कहीं भेजा जाता है?
नहीं। बदलने का काम आपके ब्राउज़र में होता है, और जो भी आप चिपकाते हैं वह कहीं सहेजा या हमारे सर्वर को भेजा नहीं जाता। किसी ऐसे पेज पर पासवर्ड या टोकन न चिपकाएँ जिस पर आपको भरोसा नहीं।
स्रोत
- Go: encoding/json, Unmarshal नियम और struct टैग (अंग्रेजी में)
- The Go Programming Language Specification: संख्यात्मक प्रकार और any (अंग्रेजी में)
आँकड़े और टेक्स्ट आखिरी बार गुरुवार, 12 नवंबर 2026 को जाँचे गए।