ToolDeck

JSON থেকে Go Struct

JSON থেকে Go struct তৈরি করুন

একটি উদাহরণ চেষ্টা করুন
রুট struct-এর নাম:

JSON ইনপুট

Go আউটপুট

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ
Go struct এখানে দেখা যাবে…

JSON থেকে Go রূপান্তর কী?

JSON থেকে Go রূপান্তর কাঁচা JSON ডেটাকে Go টাইপ ডেফিনিশনে পরিণত করে, যা Go-র স্ট্যান্ডার্ড লাইব্রেরির encoding/json প্যাকেজের সাথে কাজ করে। Go স্ট্যাটিক্যালি টাইপড, তাই প্রতিটি JSON ফিল্ডের জন্য একটি সংশ্লিষ্ট স্ট্রাক্ট ফিল্ড দরকার সঠিক টাইপ ও স্ট্রাক্ট ট্যাগ সহ, যা সিরিয়ালাইজারকে জানায় কোন JSON কী ম্যাপ করতে হবে। বড় বা গভীরভাবে নেস্টেড API রেসপন্সের জন্য এই ডেফিনিশন হাতে লেখা ধীর ও ত্রুটিপ্রবণ।

encoding/json প্যাকেজ, Go 1.0 থেকে স্ট্যান্ডার্ড লাইব্রেরির অংশ, JSON কী-কে এক্সপোর্টেড স্ট্রাক্ট ফিল্ডে ম্যাপ করতে রিফ্লেকশন ব্যবহার করে। ম্যাচিং ডিফল্টে কেস-ইনসেনসিটিভ, কিন্তু স্পষ্ট json স্ট্রাক্ট ট্যাগ স্ট্যান্ডার্ড প্র্যাকটিস কারণ এটি অস্পষ্টতা দূর করে এবং JSON camelCase বা snake_case-এ থাকার সময় Go-র PascalCase কনভেনশন ব্যবহার করতে দেয়। একটি কনভার্টার এটি স্বয়ংক্রিয় করে: আপনার JSON পড়ে, মান থেকে Go টাইপ অনুমান করে এবং সঠিক ট্যাগ সহ স্ট্রাক্ট ডেফিনিশন আউটপুট করে।

Go-র টাইপ সিস্টেম JSON-এ পরিষ্কারভাবে ম্যাপ করে। স্ট্রিং string হয়, বুলিয়ান bool হয়, ইন্টিজার int হয় এবং ফ্লোটিং-পয়েন্ট সংখ্যা float64 হয়। নেস্টেড JSON অবজেক্টগুলো আলাদা নামযুক্ত স্ট্রাক্ট হয় এবং অ্যারেগুলো স্লাইস হয়। একটি জটিলতা হল null: Go-র কোনো সার্বজনীন nullable টাইপ নেই, তাই null মানগুলো সাধারণত পয়েন্টার টাইপ (*string, *int) বা interface{} হয়। একটি জেনারেটর মিলিসেকেন্ডে এসব সামলায়।

JSON থেকে Go কনভার্টার কেন ব্যবহার করবেন?

হাতে JSON থেকে Go স্ট্রাক্ট ডিফাইন করা মানে ব্রেস গণনা, টাইপ অনুমান এবং API পরিবর্তনের সাথে ট্যাগ পুনরায় লেখা। একটি কনভার্টার সেই ঝামেলা দূর করে।

তাৎক্ষণিক টাইপ জেনারেশন
আপনার JSON পেস্ট করুন এবং এক সেকেন্ডের মধ্যে সঠিক Go স্ট্রাক্ট ডেফিনিশন পান। কোনো ম্যানুয়াল ফিল্ড টাইপিং নেই, কোনো ট্যাগ বাদ পড়বে না।
🔒
প্রাইভেসি-ফার্স্ট প্রসেসিং
রূপান্তর সম্পূর্ণ আপনার ব্রাউজারে চলে। আপনার JSON কখনো আপনার মেশিন ছাড়ে না। API কী, টোকেন এবং ব্যবহারকারীর ডেটা প্রাইভেট থাকে।
🏷️
সঠিক স্ট্রাক্ট ট্যাগ
প্রতিটি জেনারেটেড ফিল্ডে একটি json স্ট্রাক্ট ট্যাগ থাকে যা Go ফিল্ড নামকে মূল JSON কী-তে ম্যাপ করে। এটি json.Unmarshal-এর সময় নীরব অমিল প্রতিরোধ করে।
📦
কোনো ইনস্টল বা সাইনআপ নেই
পেজ খুলুন এবং JSON পেস্ট করুন। কোনো Go টুলচেইন প্রয়োজন নেই, ইনস্টল করার জন্য কোনো CLI টুল নেই, তৈরি করার জন্য কোনো অ্যাকাউন্ট নেই।

JSON থেকে Go ব্যবহারের ক্ষেত্র

REST API ক্লায়েন্ট ডেভেলপমেন্ট
তৃতীয়-পক্ষ REST API-এর জন্য রিকোয়েস্ট ও রেসপন্স স্ট্রাক্ট জেনারেট করুন। API ডকস থেকে স্যাম্পল JSON পেস্ট করুন এবং http.Client ও json.NewDecoder-এর জন্য প্রস্তুত টাইপ পান।
gRPC গেটওয়ে মডেল
একটি Go সার্ভিস যখন gRPC ও REST উভয় এন্ডপয়েন্ট এক্সপোজ করে, তখন JSON পেলোডের সাথে মিলে এমন Go স্ট্রাক্ট দরকার। JSON আকারটি স্ট্রাক্টে রূপান্তর করুন যা আপনার protobuf ডেফিনিশনের সাথে মিলে।
DevOps কনফিগারেশন পার্সিং
কাস্টম টুলিং ও অটোমেশন স্ক্রিপ্টের জন্য JSON কনফিগ ফাইল (Terraform আউটপুট, Kubernetes ম্যানিফেস্ট, CI/CD পাইপলাইন কনফিগ) টাইপড Go স্ট্রাক্টে পার্স করুন।
ডেটা পাইপলাইন প্রসেসিং
মেসেজ কিউ (Kafka, RabbitMQ, SQS) বা ডেটা লেক থেকে JSON রেকর্ডের জন্য Go স্ট্রাক্ট তৈরি করুন। টাইপড স্ট্রাক্ট রানটাইমের পরিবর্তে কম্পাইল সময়ে স্কিমা পরিবর্তন ধরে।
টেস্ট ফিক্সচার সেটআপ
টেবিল-ড্রিভেন টেস্টের জন্য JSON টেস্ট ফিক্সচার Go স্ট্রাক্টে রূপান্তর করুন। টাইপ-সেফ ফিক্সচার কাঁচা map[string]interface{} অ্যাসার্শনের চেয়ে টেস্ট ফেইলার সহজে ডায়াগনোজ করতে দেয়।
Go-র টাইপ সিস্টেম শেখা
ডায়নামিক ভাষা থেকে আসা শিক্ষার্থী ও ডেভেলপাররা পরিচিত JSON পেস্ট করে দেখতে পারেন Go কীভাবে explicit টাইপ, পয়েন্টার ও স্ট্রাক্ট ট্যাগ দিয়ে একই ডেটা উপস্থাপন করে।

JSON থেকে Go টাইপ ম্যাপিং

encoding/json প্যাকেজ JSON মানকে Go টাইপে ম্যাপ করার সময় নির্দিষ্ট নিয়ম অনুসরণ করে। নিচের টেবিল ডিফল্ট ম্যাপিং ও সাধারণ বিকল্প দেখায়। "ডিফল্ট" কলামে বেশিরভাগ জেনারেটর কী তৈরি করে। "বিকল্প" কলামে এমন টাইপ আছে যা আপনি আপনার প্রয়োজন অনুযায়ী বেছে নিতে পারেন।

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 স্ট্রাক্ট ট্যাগ রেফারেন্স

স্ট্রাক্ট ট্যাগ নিয়ন্ত্রণ করে কীভাবে encoding/json ফিল্ড সিরিয়ালাইজ ও ডিসিরিয়ালাইজ করে। json ট্যাগ সবচেয়ে সাধারণ, কিন্তু একই ফিল্ডে অন্য ট্যাগ (db, yaml, xml) মিলিয়ে ব্যবহার করা যায়। ট্যাগ সিনট্যাক্স হল ফিল্ড টাইপের পরে ব্যাকটিক-ডিলিমিটেড স্ট্রিং। এখানে 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। উভয়ই একই স্ট্রাক্ট ট্যাগ নিয়ম ব্যবহার করে, কিন্তু কখন ব্যবহার করবেন তা ভিন্ন।

json.Unmarshal
একটি []byte নেয় এবং স্ট্রাক্ট পপুলেট করে। ইতিমধ্যে মেমোরিতে পূর্ণ JSON-এর জন্য সেরা: io.ReadAll দিয়ে পড়া HTTP রেসপন্স বডি, ফাইল কন্টেন্ট, বা টেস্ট ফিক্সচার। JSON ভুল ফরম্যাটের বা টাইপ না মিললে এরর রিটার্ন করে।
json.NewDecoder
একটি io.Reader র‍্যাপ করে এবং টোকেন আসার সাথে সাথে JSON ডিকোড করে। স্ট্রিমিং সোর্সের জন্য সেরা: সরাসরি পড়া HTTP রেসপন্স বডি, নিউলাইন-ডিলিমিটেড JSON (NDJSON) লগ, বা বড় ফাইল যা পুরোটা মেমোরিতে লোড করতে চান না। মাল্টি-অবজেক্ট স্ট্রিমের জন্য More() দিয়ে লুপে Decode() কল করুন।

কোড উদাহরণ

এই উদাহরণগুলো দেখায় কীভাবে JSON থেকে জেনারেটেড Go স্ট্রাক্ট বাস্তব প্রোগ্রামে ব্যবহার করতে হয় এবং অন্যান্য ভাষা থেকেও কীভাবে জেনারেট করা যায়। Go উদাহরণগুলো স্ট্যান্ডার্ড লাইব্রেরির 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 পূর্ণ JSON ডকুমেন্ট সহ একটি []byte নেয় এবং স্ট্রাক্ট পপুলেট করে। json.NewDecoder একটি io.Reader র‍্যাপ করে এবং ইনক্রিমেন্টালি JSON ডিকোড করে। Unmarshal ব্যবহার করুন যখন ইতিমধ্যে মেমোরিতে পূর্ণ JSON আছে (যেমন io.ReadAll-এর পরে)। NewDecoder ব্যবহার করুন যখন সরাসরি HTTP রেসপন্স বডি, ফাইল, বা যেকোনো স্ট্রিমিং সোর্স থেকে পড়ছেন যেখানে পুরো পেলোড বাফার করতে চান না।
পেলোড থেকে মিসিং JSON ফিল্ড Go কীভাবে সামলায়?
মিসিং JSON ফিল্ড সংশ্লিষ্ট Go স্ট্রাক্ট ফিল্ডকে তার জিরো ভ্যালুতে রাখে: স্ট্রিংয়ের জন্য "", সংখ্যার জন্য 0, bool-এর জন্য false, পয়েন্টার ও স্লাইসের জন্য nil। যদি "ফিল্ড মিসিং" ও "ফিল্ড উপস্থিত কিন্তু জিরো"-এর মধ্যে পার্থক্য করতে হয়, তাহলে *int বা *string-এর মতো পয়েন্টার টাইপ ব্যবহার করুন।
JSON-এর জন্য Go স্ট্রাক্ট ফিল্ড কেন এক্সপোর্টেড (বড় হাতে শুরু) হতে হবে?
encoding/json প্যাকেজ স্ট্রাক্ট ফিল্ড অ্যাক্সেস করতে রিফ্লেকশন ব্যবহার করে এবং Go-র রিফ্লেকশন নিয়ম শুধুমাত্র এক্সপোর্টেড (বড় হাতের) ফিল্ডে অ্যাক্সেস দেয়। কোনো ফিল্ড ছোট হাতে শুরু হলে, encoding/json সেটি দেখতে পায় না এবং মার্শালিং ও আনমার্শালিং উভয় সময় চুপচাপ স্কিপ করে।
Go-তে snake_case JSON কী কীভাবে সামলাবো?
সঠিক JSON কী নাম দিয়ে json স্ট্রাক্ট ট্যাগ যোগ করুন। যেমন, 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-তে pointer ব্যবহার করাটাই প্রচলিত পদ্ধতি।
JSON-এ এমন সংখ্যা থাকলে কী হয় যা Go-র int ধারণ করতে পারে না?
Go-র int প্ল্যাটফর্ম-নির্ভর (32-বিট সিস্টেমে 32-বিট, 64-বিট সিস্টেমে 64-বিট)। JavaScript টাইমস্ট্যাম্প বা ডেটাবেস ID-এর মতো বড় সংখ্যার জন্য স্পষ্টভাবে int64 ব্যবহার করুন। JSON সংখ্যায় দশমিক থাকলে float64 ব্যবহার করুন। float64 প্রিসিশন ছাড়ানো সংখ্যার জন্য json.Number ব্যবহার করুন, যা raw string representation রাখে।
এই টুল ও JSON-to-Go-Struct-এর মধ্যে পার্থক্য কী?
এই টুল encoding/json ব্যবহারের প্যাটার্নের উপর ফোকাস করে Go টাইপ ডেফিনিশন জেনারেট করে: সঠিক স্ট্রাক্ট ট্যাগ, সঠিক টাইপ ইনফারেন্স এবং নেস্টেড কাঠামো ও অ্যারে সামলানো। এই সাইটের JSON to Go Struct টুল স্ট্রাক্ট স্ক্যাফোল্ডিংয়ে ফোকাস করে। উভয়ই বৈধ Go কোড তৈরি করে। আপনার ওয়ার্কফ্লোর জন্য যেটি উপযুক্ত সেটি ব্যবহার করুন। এই পেজের স্ট্রাক্ট ট্যাগ রেফারেন্স ও টাইপ ম্যাপিং টেবিল যেকোনো জেনারেটর ব্যবহারকারীর জন্য উপকারী।

সম্পর্কিত টুলস

JSON ফরম্যাটার ও বিউটিফায়ারসিনট্যাক্স হাইলাইটিং সহ JSON ফরম্যাট ও বিউটিফাই করুনJSON ভ্যালিডেটরJSON সিনট্যাক্স ও স্ট্রাকচার ভ্যালিডেট করুনJSON ডিফদুটি JSON অবজেক্ট তুলনা করুন ও পার্থক্য হাইলাইট করুনJSON প্রিটি প্রিন্টপাঠযোগ্যতার জন্য কাস্টমাইজযোগ্য ইন্ডেন্টেশন সহ JSON প্রিটি প্রিন্ট করুনJSON মিনিফায়ারহোয়াইটস্পেস সরিয়ে JSON মিনিফাই ও কম্প্যাক্ট করুনJSON থেকে YAML রূপান্তরকারীJSON কে YAML ফরম্যাটে রূপান্তর করুনJSON থেকে CSVJSON অ্যারেকে CSV ফরম্যাটে রূপান্তর করুনJSON থেকে TypeScriptJSON থেকে TypeScript ইন্টারফেস তৈরি করুনJSON থেকে C# ক্লাসJSON থেকে C# ক্লাস তৈরি করুনJSON থেকে PythonJSON থেকে Python dataclass তৈরি করুনJSON থেকে JavaJSON থেকে Java POJO ক্লাস তৈরি করুনJSON থেকে DartfromJson ও toJson সহ JSON থেকে Dart ক্লাস তৈরি করুন