JSON to Go Struct

JSON से Go struct जनरेट करें

उदाहरण देखें
रूट struct का नाम:

JSON इनपुट

Go आउटपुट

स्थानीय रूप से चलता है · सीक्रेट पेस्ट करना सुरक्षित है
Go struct यहाँ दिखेंगे…

JSON से Go रूपांतरण क्या है?

JSON से Go रूपांतरण वह प्रक्रिया है जिसमें कच्चे JSON डेटा को Go के standard library के encoding/json पैकेज के साथ काम करने वाली Go प्रकार परिभाषाओं में बदला जाता है। Go एक statically typed भाषा है, इसलिए प्रत्येक JSON फ़ील्ड के लिए एक संगत struct फ़ील्ड चाहिए जिसमें सही प्रकार और एक struct टैग हो जो serializer को बताए कि किस JSON कुंजी से मैपिंग करनी है। बड़ी या गहरी नेस्टेड API प्रतिक्रियाओं के लिए ये परिभाषाएँ हाथ से लिखना धीमा और त्रुटि-प्रवण होता है।

encoding/json पैकेज, जो Go 1.0 से Go विनिर्देशन में परिभाषित है, JSON कुंजियों को निर्यातित struct फ़ील्ड से मिलाने के लिए reflection का उपयोग करता है। यह मिलान डिफ़ॉल्ट रूप से case-insensitive होता है, परंतु स्पष्ट json struct टैग मानक प्रचलन है क्योंकि वे अस्पष्टता दूर करते हैं और आपको Go की PascalCase परंपरा बनाए रखने देते हैं जबकि JSON camelCase या snake_case में रहता है। एक कनवर्टर यह सब स्वचालित करता है: वह आपका JSON पढ़ता है, मानों से Go प्रकार अनुमानित करता है और सही टैग के साथ struct परिभाषाएँ आउटपुट करता है।

Go का type system JSON पर अच्छी तरह मैप होता है। स्ट्रिंग string बनती है, बूलियन bool बनता है, पूर्णांक int बनते हैं और दशमलव संख्याएँ float64 बनती हैं। नेस्टेड JSON ऑब्जेक्ट अलग-अलग नाम वाले struct बनते हैं और ऐरे स्लाइस बनते हैं। एकमात्र अपवाद null है: Go में कोई सार्वभौमिक nullable प्रकार नहीं है, इसलिए null मान सामान्यतः पॉइंटर प्रकार (*string, *int) या interface{} बनते हैं। एक जनरेटर यह सब कुछ ही मिलीसेकंड में संभाल लेता है।

JSON to Go कनवर्टर का उपयोग क्यों करें?

JSON से Go struct हाथ से परिभाषित करने का अर्थ है curly braces गिनना, types का अनुमान लगाना और हर बार API बदलने पर टैग फिर से लिखना। एक कनवर्टर यह सब कार्य समाप्त कर देता है।

तुरंत प्रकार जनरेशन
अपना JSON चिपकाएँ और एक सेकंड से भी कम समय में सही Go struct परिभाषाएँ पाएं। कोई मैन्युअल फ़ील्ड टाइपिंग नहीं, कोई छूटे टैग नहीं।
🔒
डेटा निजी रखें
रूपांतरण पूरी तरह आपके ब्राउज़र में चलता है। आपका JSON कभी आपकी मशीन से बाहर नहीं जाता। API कुंजियाँ, टोकन और उपयोगकर्ता डेटा निजी रहते हैं।
🏷️
सही struct टैग
जनरेट की गई प्रत्येक फ़ील्ड में एक json struct टैग शामिल होता है जो Go फ़ील्ड के नाम को मूल JSON कुंजी से मैप करता है। यह json.Unmarshal के दौरान मूक असंगति को रोकता है।
📦
इंस्टॉलेशन या साइनअप की आवश्यकता नहीं
पेज खोलें और अपना JSON चिपकाएँ। कोई Go टूलचेन आवश्यक नहीं, कोई CLI उपकरण इंस्टॉल नहीं, कोई खाता बनाने की ज़रूरत नहीं।

JSON to Go के उपयोग के मामले

REST API क्लाइंट विकास
तृतीय-पक्ष REST APIs के लिए अनुरोध और प्रतिक्रिया struct जनरेट करें। API दस्तावेज़ से नमूना JSON चिपकाएँ और http.Client तथा json.NewDecoder के लिए तैयार प्रकार पाएं।
gRPC Gateway मॉडल
जब कोई Go सेवा gRPC और REST दोनों एंडपॉइंट उजागर करती है, तो आपको ऐसे Go struct चाहिए जो JSON पेलोड से मेल खाएँ। JSON की संरचना को अपनी protobuf परिभाषाओं से मेल खाने वाले struct में बदलें।
DevOps कॉन्फ़िगरेशन पार्सिंग
JSON कॉन्फ़िगरेशन फ़ाइलों (Terraform आउटपुट, Kubernetes मैनिफ़ेस्ट, CI/CD पाइपलाइन कॉन्फ़िगरेशन) को कस्टम उपकरण और स्वचालन स्क्रिप्ट के लिए टाइप किए गए Go struct में पार्स करें।
डेटा पाइपलाइन प्रसंस्करण
संदेश कतारों (Kafka, RabbitMQ, SQS) या डेटा लेक से JSON रिकॉर्ड के लिए Go struct बनाएं। टाइप किए गए struct स्कीमा परिवर्तन को रनटाइम की बजाय कंपाइल समय पर पकड़ते हैं।
परीक्षण फ़िक्सचर सेटअप
तालिका-चालित परीक्षणों के लिए JSON परीक्षण फ़िक्सचर को Go struct में बदलें। प्रकार-सुरक्षित फ़िक्सचर कच्चे map[string]interface{} assertions की तुलना में परीक्षण विफलताओं का निदान करना आसान बनाते हैं।
Go का प्रकार तंत्र सीखना
गतिशील भाषाओं से आने वाले छात्र और डेवलपर परिचित JSON चिपकाकर देख सकते हैं कि Go स्पष्ट प्रकारों, पॉइंटर और struct टैग के साथ समान डेटा कैसे दर्शाता है।

JSON से Go प्रकार मैपिंग

encoding/json पैकेज JSON मानों को Go प्रकारों से मैप करते समय विशिष्ट नियमों का पालन करता है। नीचे दी गई तालिका डिफ़ॉल्ट मैपिंग और सामान्य विकल्प दर्शाती है। "डिफ़ॉल्ट" स्तंभ वह है जो अधिकांश जनरेटर उत्पन्न करते हैं। "विकल्प" स्तंभ वे प्रकार दर्शाता है जो आप अपनी आवश्यकताओं के आधार पर चुन सकते हैं, जैसे बड़े आईडी के लिए int64 या nullable फ़ील्ड के लिए पॉइंटर प्रकार।

JSON प्रकारउदाहरणडिफ़ॉल्टविकल्प
string"hello"stringstring
number (integer)42intint64
number (float)3.14float64float64
booleantrueboolbool
nullnullinterface{}*string / *int
object{"k": "v"}structstruct
array of strings["a", "b"][]string[]string
array of objects[{"id": 1}][]Item[]Item
mixed array[1, "a"][]interface{}[]interface{}

Go JSON Struct टैग संदर्भ

Struct टैग नियंत्रित करते हैं कि encoding/json फ़ील्ड को कैसे marshal और unmarshal करता है। json टैग अब तक सबसे सामान्य है, लेकिन आप इसे एक ही फ़ील्ड पर अन्य टैग (db, yaml, xml) के साथ मिला सकते हैं। टैग का syntax फ़ील्ड type के बाद backtick string होती है। encoding/json द्वारा समर्थित json टैग विकल्प यहाँ दिए गए हैं।

टैगव्यवहारउपयोग का मामला
json:"name"Maps struct field to JSON key "name"Always generated
json:"name,omitempty"Omits field from output if zero valueOptional fields
json:"-"Field is never serialized or deserializedInternal fields
json:"name,string"Encodes int/bool as JSON stringString-encoded numbers

json.Unmarshal बनाम json.NewDecoder

Go JSON डीकोड करने के दो तरीके प्रदान करता है: बाइट स्लाइस के लिए json.Unmarshal और io.Reader स्ट्रीम के लिए json.NewDecoder। दोनों एक ही struct टैग नियम उपयोग करते हैं, लेकिन उनके उपयोग के समय में अंतर है।

json.Unmarshal
एक []byte लेता है और struct में डेटा भरता है। उस JSON के लिए सबसे उपयुक्त जो पहले से पूरी तरह स्मृति में हो: io.ReadAll से पढ़े गए HTTP प्रतिक्रिया बॉडी, फ़ाइल सामग्री, या परीक्षण फ़िक्सचर। यदि JSON दोषपूर्ण हो या प्रकार मेल न खाएँ तो त्रुटि लौटाता है।
json.NewDecoder
एक io.Reader को लपेटता है और JSON टोकन आते समय डीकोड करता है। स्ट्रीमिंग स्रोतों के लिए सबसे उपयुक्त: सीधे पढ़े गए HTTP प्रतिक्रिया बॉडी, नई-पंक्ति-सीमांकित JSON (NDJSON) लॉग, या बड़ी फ़ाइलें जिन्हें आप पूरी तरह स्मृति में नहीं लोड करना चाहते। बहु-ऑब्जेक्ट स्ट्रीम के लिए More() के साथ लूप में Decode() का उपयोग करें।

कोड उदाहरण

ये उदाहरण दर्शाते हैं कि JSON से जनरेट किए गए Go struct को वास्तविक कार्यक्रमों में कैसे उपयोग करें, साथ ही उन्हें अन्य भाषाओं से कैसे जनरेट करें। Go उदाहरण standard library से encoding/json उपयोग करते हैं।

Go (json.Unmarshal)
package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	ID       int      `json:"id"`
	Name     string   `json:"name"`
	Email    string   `json:"email"`
	IsActive bool     `json:"is_active"`
	Tags     []string `json:"tags"`
}

func main() {
	data := []byte(`{"id":1,"name":"Alice","email":"alice@example.com","is_active":true,"tags":["admin","editor"]}`)

	var user User
	if err := json.Unmarshal(data, &user); err != nil {
		panic(err)
	}
	fmt.Println(user.Name)  // → Alice
	fmt.Println(user.Tags)  // → [admin editor]
}
JavaScript (fetch + type reference)
// JSON response from API — this is the shape you'd convert to Go:
const res = await fetch("https://api.example.com/users/1");
const user = await res.json();
// user → { "id": 1, "name": "Alice", "email": "alice@example.com" }

// Equivalent Go struct:
// type User struct {
//     ID    int    `json:"id"`
//     Name  string `json:"name"`
//     Email string `json:"email"`
// }
Python (generate Go structs from JSON)
import json

def json_to_go(data: dict, name: str = "Root") -> str:
    lines = [f"type {name} struct {{"]
    type_map = {str: "string", int: "int", float: "float64", bool: "bool"}

    for key, value in data.items():
        go_type = type_map.get(type(value), "interface{}")
        field = key.title().replace("_", "")  # snake_case → PascalCase
        lines.append(f'\t{field} {go_type} `json:"{key}"`')
    lines.append("}")
    return "\n".join(lines)

data = json.loads('{"user_name": "Alice", "age": 30, "verified": true}')
print(json_to_go(data))
# type Root struct {
#     UserName string `json:"user_name"`
#     Age      int    `json:"age"`
#     Verified bool   `json:"verified"`
# }
Go (json.Decoder for streams)
package main

import (
	"encoding/json"
	"fmt"
	"strings"
)

type Event struct {
	Type    string `json:"type"`
	Payload string `json:"payload"`
}

func main() {
	stream := strings.NewReader(`{"type":"click","payload":"btn-1"}
{"type":"scroll","payload":"page-2"}`)

	dec := json.NewDecoder(stream)
	for dec.More() {
		var ev Event
		if err := dec.Decode(&ev); err != nil {
			break
		}
		fmt.Printf("%s: %s\n", ev.Type, ev.Payload)
	}
	// → click: btn-1
	// → scroll: page-2
}

अक्सर पूछे जाने वाले प्रश्न

json.Unmarshal और json.Decode में क्या अंतर है?
json.Unmarshal एक []byte लेता है जिसमें पूरा JSON दस्तावेज़ हो और struct में डेटा भरता है। json.NewDecoder एक io.Reader को लपेटता है और JSON को क्रमिक रूप से डीकोड करता है। Unmarshal का उपयोग तब करें जब आपके पास पहले से पूरा JSON स्मृति में हो (जैसे io.ReadAll के बाद)। NewDecoder का उपयोग तब करें जब किसी HTTP प्रतिक्रिया बॉडी, फ़ाइल, या किसी भी स्ट्रीमिंग स्रोत से सीधे पढ़ रहे हों जहाँ आप पूरा पेलोड बफ़र करने से बचना चाहते हों।
Go पेलोड में अनुपस्थित JSON फ़ील्ड को कैसे संभालता है?
अनुपस्थित JSON फ़ील्ड संगत Go struct फ़ील्ड को उसके शून्य मान पर छोड़ देते हैं: स्ट्रिंग के लिए "", संख्याओं के लिए 0, बूल के लिए false, पॉइंटर और स्लाइस के लिए nil। यदि आपको "फ़ील्ड अनुपस्थित" और "फ़ील्ड मौजूद लेकिन शून्य" के बीच अंतर करना हो, तो *int या *string जैसे पॉइंटर प्रकार का उपयोग करें। nil पॉइंटर का अर्थ है फ़ील्ड अनुपस्थित था; शून्य मान वाले non-nil पॉइंटर का अर्थ है इसे स्पष्ट रूप से 0 या "" पर सेट किया गया था।
JSON के लिए Go struct फ़ील्ड को निर्यातित (बड़े अक्षर से) क्यों होना चाहिए?
encoding/json पैकेज struct फ़ील्ड तक पहुँचने के लिए reflection का उपयोग करता है, और Go के reflection नियम केवल निर्यातित (बड़े अक्षर से शुरू) फ़ील्ड तक पहुँच की अनुमति देते हैं। यदि कोई फ़ील्ड छोटे अक्षर से शुरू हो, तो encoding/json उसे देख नहीं सकता और marshaling तथा unmarshaling दोनों के दौरान चुपचाप छोड़ देगा। निर्यातित PascalCase फ़ील्ड को छोटे अक्षर वाली JSON कुंजी से मैप करने के लिए json struct टैग का उपयोग करें।
Go में snake_case JSON कुंजियों को कैसे संभालें?
सटीक JSON कुंजी नाम के साथ json struct टैग जोड़ें। उदाहरण के लिए, JSON फ़ील्ड "user_name" टैग `json:"user_name"` के साथ Go फ़ील्ड UserName से मैप होती है। जनरेटर इसे स्वचालित रूप से संभालता है। encoding/json में नामकरण नीति सेट करने का कोई वैश्विक विकल्प नहीं है; प्रत्येक फ़ील्ड को अपना टैग घोषित करना होगा।
क्या मैं null मान वाले JSON को Go में बदल सकता हूँ?
हाँ। null JSON मान Go में पॉइंटर प्रकार से मैप होते हैं। "age": null जैसी फ़ील्ड Age *int `json:"age"` बन जाती है। जब JSON मान null हो, तो Go पॉइंटर nil होता है। जब उसका कोई मान हो, तो Go एक int आवंटित करता है और पॉइंटर उसे संदर्भित करता है। उन फ़ील्ड के लिए जो हमेशा nullable हों, पॉइंटर का उपयोग Go में मुहावरेदार तरीका है।
क्या होता है यदि JSON में ऐसी संख्या हो जो Go के int में न समाए?
Go का int प्लेटफ़ॉर्म-आश्रित है (32-बिट सिस्टम पर 32-बिट, 64-बिट सिस्टम पर 64-बिट)। JavaScript timestamps या डेटाबेस आईडी जैसी बड़ी संख्याओं के लिए, स्पष्ट रूप से int64 उपयोग करें। यदि JSON संख्या में दशमलव स्थान हों, तो float64 उपयोग करें। float64 परिशुद्धता से अधिक संख्याओं के लिए (जैसे बड़े वित्तीय मान), json.Number उपयोग करें, जो कच्चे स्ट्रिंग निरूपण को बनाए रखता है और आपको इसे स्वयं पार्स करने देता है।
इस उपकरण और JSON-to-Go-Struct में क्या अंतर है?
यह उपकरण encoding/json उपयोग पैटर्न पर केंद्रित Go प्रकार परिभाषाएँ जनरेट करता है: सही struct टैग, उचित प्रकार अनुमान और नेस्टेड संरचनाओं तथा ऐरे का प्रबंधन। इस साइट पर JSON to Go Struct उपकरण struct scaffolding पर केंद्रित है। दोनों वैध Go कोड उत्पन्न करते हैं। जो आपके कार्यप्रवाह के अनुकूल हो उसका उपयोग करें। इस पेज पर struct टैग संदर्भ और प्रकार मैपिंग तालिकाएँ किसी भी जनरेटर के लिए उपयोगी हैं।