JSON से Go Struct जनरेटर
JSON से JSON स्ट्रक्ट टैग्स के साथ Go स्ट्रक्ट टाइप डेफिनिशन बनाएँ। यह JSON वैल्यूज़ से Go टाइप्स का पता लगाता है और encoding/json के साथ इस्तेमाल के लिए सही Go स्ट्रक्ट्स बनाता है।
सही टाइप्स और JSON स्ट्रक्ट टैग्स के साथ Go स्ट्रक्ट फ़ील्ड्स बनाता है।
JSON स्ट्रिंग्स को स्ट्रिंग में, नंबर्स को int64 या float64 में, और बूलियन्स को bool में बदलता है।
नेस्टेड JSON ऑब्जेक्ट्स के लिए नेस्टेड स्ट्रक्ट डेफिनिशन बनाता है।
इसमें आम तौर पर इस्तेमाल होने वाले PascalCase फ़ील्ड नामों और camelCase JSON टैग्स का इस्तेमाल किया जाता है।
आउटपुट encoding/json Marshal और Unmarshal के साथ इस्तेमाल के लिए तैयार है।
कैसे इस्तेमाल करें
इनपुट फ़ील्ड में JSON ऑब्जेक्ट पेस्ट करें
जनरेटर Go टाइप्स का अनुमान लगाता है और स्ट्रक्ट डिक्लेरेशन बनाता है।
अपनी Go सोर्स फ़ाइल में struct डेफ़िनिशन को कॉपी करें।
encoding/json को इम्पोर्ट करें और json.Unmarshal के साथ struct का इस्तेमाल करें।
Go API डेवलपमेंट
- REST API रिस्पॉन्स को अनमार्शल करें
- HTTP हैंडलर्स के लिए रिक्वेस्ट/रिस्पॉन्स प्रकार तय करें
- Go सर्विसेज़ के लिए JSON कॉन्फ़िग फ़ाइलें
डेटा इंजीनियरिंग
- Go वर्कर्स में JSON इवेंट पेलोड्स को पार्स करें
- सैंपल रिकॉर्ड्स से डेटा मॉडल स्ट्रक्ट्स (structs) को परिभाषित करें।
- Go रिसीवर्स के लिए वेबहुक पेलोड्स के प्रकार तय करें
Go इकोसिस्टम
- net/http
- जिन
- गूँज
- ची
- gRPC-गेटवे
- एनकोडिंग/जेएसओएन
उन फ़ील्ड्स के JSON टैग्स में `omitempty` जोड़ें जिन्हें ज़ीरो-वैल्यू होने पर हटा दिया जाना चाहिए: `json:"field,omitempty"`
JSON में nullable फ़ील्ड्स (null वैल्यूज़) के लिए, ज़ीरो वैल्यू और एब्सेंट (मौजूद न होने) के बीच फ़र्क करने के लिए पॉइंटर टाइप्स (*string, *int64) का इस्तेमाल करें।
अगर JSON नंबर इंटीजर या फ्लोट हो सकता है, तो Go के encoding/json में प्रिसिजन लॉस (precision loss) से बचने के लिए float64 का इस्तेमाल करें।
ऐसे JSON फ़ील्ड्स के लिए पॉइंटर टाइप्स (*string, *int64) का इस्तेमाल करें जो null हो सकते हैं, ताकि null और ज़ीरो वैल्यूज़ के बीच सही फ़र्क किया जा सके।
साफ़ मार्शल्ड JSON आउटपुट पाने के लिए, ऑप्शनल फ़ील्ड्स के JSON टैग्स में `omitempty` जोड़ें।
प्रोडक्शन कोड के लिए, बनाए गए स्ट्रक्ट (struct) को पूरी API स्पेसिफिकेशन के आधार पर वैलिडेट करें और ऐसे अतिरिक्त फ़ील्ड्स जोड़ें जो शायद सैंपल JSON में न हों।
अक्सर पूछे जाने वाले सवाल
हमारे टूल्स और सेवाओं के बारे में आम सवालों के जवाब पाएँ।
JSON से Go Struct को समझना
Go का स्टैटिक टाइप सिस्टम और इसका स्टैंडर्ड लाइब्रेरी `encoding/json` पैकेज, Go प्रोग्राम में JSON डेटा को हैंडल करने के लिए 'struct tag-based JSON serialization' को सबसे सही तरीका बनाते हैं। हर JSON की (key) एक struct फ़ील्ड से जुड़ी होती है, जिसमें एक संबंधित `json` struct टैग होता है। यह टैग सीरियलाइज़ेशन की की (key) का नाम, वैकल्पिक `omitempty` व्यवहार और वैकल्पिक स्ट्रिंग कन्वर्ज़न (coercion) बताता है। कॉम्प्लेक्स API रिस्पॉन्स पेलोड या बड़ी JSON कॉन्फ़िगरेशन फ़ाइलों के लिए इन struct डेफ़िनिशन को हाथ से लिखना समय लेने वाला और गलतियों की संभावना वाला काम है। डेवलपर्स अक्सर फ़ील्ड के नाम गलत टाइप कर देते हैं, गलत Go टाइप चुन लेते हैं, या struct टैग जोड़ना भूल जाते हैं। इन सभी वजहों से JSON अनमार्शलिंग (unmarshaling) के दौरान ऐसी साइलेंट फ़ेलियर (silent failures) होती हैं जिनका पता लगाना मुश्किल होता है। JSON उदाहरणों से Go structs को ऑटोमैटिक रूप से बनाने से इस तरह की गलतियाँ पूरी तरह खत्म हो जाती हैं।
JSON-से-Go कन्वर्ज़न के लिए टाइप इन्फ़रेंस नियम, JSON टाइप सिस्टम और Go के प्रिमिटिव और कम्पोजिट टाइप के बीच सीधे मैपिंग का पालन करते हैं। JSON स्ट्रिंग्स, Go स्ट्रिंग फ़ील्ड्स बन जाते हैं। JSON बूलियन वैल्यूज़, Go bool बन जाते हैं। JSON null एक खास मामला है: क्योंकि स्ट्रिंग्स, इंटीजर्स और बूलियन्स (खाली स्ट्रिंग, 0, false) के लिए Go की ज़ीरो वैल्यूज़ ऐसी मान्य वैल्यूज़ हैं जो JSON के 'अनुपस्थिति' (absence) वाले कॉन्सेप्ट से टकराती हैं, इसलिए nullable JSON फ़ील्ड्स को पॉइंटर टाइप (*string, *int64, *bool) के तौर पर टाइप किया जाना चाहिए ताकि Go का nil पॉइंटर, ज़ीरो वैल्यू से अलग JSON null को सही ढंग से दिखा सके। JSON एरेज़, एलिमेंट टाइप के आधार पर Go स्लाइस ([]string, []int64, []NestedStruct) बन जाते हैं। JSON ऑब्जेक्ट्स, नेस्टेड स्ट्रक्ट टाइप बन जाते हैं, जिनमें से हर एक का अपना स्ट्रक्ट डेफ़िनिशन होता है।
Go का encoding/json पैकेज मार्शलिंग और अनमार्शलिंग के व्यवहार को कंट्रोल करने के लिए struct टैग का इस्तेमाल करता है। json struct टैग सिंटैक्स `json:"keyname"` struct फ़ील्ड को JSON की से मैप करता है। टैग में अतिरिक्त विकल्प व्यवहार को कंट्रोल करते हैं: `json:"keyname,omitempty"` मार्शलिंग के दौरान फ़ील्ड को छोड़ देता है अगर उसमें उसका ज़ीरो वैल्यू हो, जिससे ऑप्शनल फ़ील्ड के लिए साफ़ JSON आउटपुट मिलता है; `json:"-"` फ़ील्ड को पूरी तरह से इग्नोर कर देता है; `json:"keyname,string"` न्यूमेरिक वैल्यू को JSON स्ट्रिंग में और उससे वापस बदलता है। जनरेटर हर फ़ील्ड के लिए बेसिक keyname टैग बनाता है। डेवलपर्स को ऑप्शनल फ़ील्ड के लिए omitempty जोड़ना चाहिए और अपने असल API कॉन्ट्रैक्ट के आधार पर नलेबल फ़ील्ड के लिए पॉइंटर टाइप का इस्तेमाल करना चाहिए।
यह JSON से Go Struct जनरेटर सही PascalCase एक्सपोर्टेड फ़ील्ड नामों, उपयुक्त टाइप वाले फ़ील्ड्स और ओरिजिनल JSON की-नेम (key names) वाले सटीक JSON स्ट्रक्ट टैग्स के साथ सही Go स्ट्रक्ट डेफ़िनिशन बनाता है। नेस्टेड JSON ऑब्जेक्ट्स को Go की नेमिंग कन्वेंशन के अनुसार अलग-अलग नाम वाले स्ट्रक्ट टाइप्स में निकाला जाता है। जब इस आउटपुट को सही पैकेज डिक्लेरेशन के साथ Go सोर्स फ़ाइल में पेस्ट किया जाता है, तो यह तुरंत कम्पाइल होने लायक होता है और encoding/json के साथ-साथ jsoniter और go-json जैसी लोकप्रिय थर्ड-पार्टी JSON लाइब्रेरीज़ के साथ भी कम्पैटिबल होता है। Go में API क्लाइंट डेवलपमेंट, माइक्रोसर्विस डेटा मॉडलिंग और कॉन्फ़िगरेशन पार्सिंग के लिए, यह टूल नए डेटा स्ट्रक्चर्स के लिए बूटस्ट्रैपिंग के समय को मिनटों के मैनुअल काम से घटाकर सेकंडों के ऑटोमेटेड जनरेशन में बदल देता है।