JSON'dan Go Struct'a

JSON'dan Go struct'ları oluşturun

Örnek dene
Kök struct adı:

JSON Girişi

Go Çıktısı

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
Go struct'ları burada görünecek…

JSON'dan Go Struct'a Dönüşüm Nedir?

JSON'dan Go'ya dönüşüm, ham JSON verisini Go'nun standart kütüphanesindeki encoding/json paketiyle uyumlu Go tür tanımlarına dönüştürme işlemidir. Go statik türlendirilmiş bir dil olduğundan her JSON alanının, doğru türe sahip ve serileştiriciye hangi JSON anahtarıyla eşleşeceğini belirten bir struct etiketi içeren bir struct alanına karşılık gelmesi gerekir. Büyük veya derin iç içe API yanıtları için bu tanımları elle yazmak hem yavaş hem de hata yapmaya açıktır.

Go 1.0'dan bu yana Go belirtiminde yer alan encoding/json paketi, JSON anahtarlarını dışa aktarılmış struct alanlarıyla eşleştirmek için yansıma kullanır. Eşleştirme varsayılan olarak büyük/küçük harf duyarlı değildir; ancak açık json struct etiketleri, belirsizliği ortadan kaldırdığı ve JSON camelCase veya snake_case biçiminde kalırken Go'nun PascalCase kuralını kullanmanıza olanak tanıdığı için standart pratiktir. Bir dönüştürücü bunu otomatikleştirir: JSON'unuzu okur, değerlerden Go türlerini çıkarsar ve doğru etiketlere sahip struct tanımları üretir.

Go'nun tür sistemi JSON ile birebir örtüşür. Dizgeler string, boolean'lar bool, tam sayılar int ve ondalıklı sayılar float64 olur. İç içe JSON nesneleri ayrı adlandırılmış struct'lara, diziler ise dilim'e (slice) dönüşür. Tek eksik nokta null'dır: Go'nun evrensel bir null olabilir türü olmadığından null değerler genellikle işaretçi türlerine (*string, *int) veya interface{}'ye dönüşür. Bir üretici tüm bunları milisaniyeler içinde halleder.

Neden JSON'dan Go Dönüştürücüsü Kullanmalısınız?

JSON'dan Go struct'larını elle tanımlamak; parantez saymak, türleri tahmin etmek ve API her değiştiğinde etiketleri yeniden yazmak anlamına gelir. Bir dönüştürücü bu engeli ortadan kaldırır.

Anında tür üretimi
JSON'unuzu yapıştırın ve bir saniyeden kısa sürede doğru Go struct tanımları alın. Manuel alan yazımı yok, atlanan etiket yok, hizalama sorunu yok.
🔒
Gizlilik öncelikli işlem
Dönüşüm tamamen tarayıcınızda gerçekleşir. JSON'unuz asla makinenizden çıkmaz. API anahtarları, token'lar ve kullanıcı verileri gizli kalır.
🏷️
Doğru struct etiketleri
Üretilen her alan, Go alan adını orijinal JSON anahtarıyla eşleştiren bir json struct etiketi içerir. Bu, json.Unmarshal sırasında sessiz uyumsuzlukları engeller.
📦
Kurulum veya hesap gerektirmez
Sayfayı açın ve JSON'unuzu yapıştırın. Go araç zinciri gerekli değil, kurulacak CLI aracı yok, oluşturulacak hesap yok.

JSON'dan Go Struct'a Kullanım Senaryoları

REST API İstemci Geliştirme
Üçüncü taraf REST API'leri için istek ve yanıt struct'ları oluşturun. API belgelerinden örnek JSON yapıştırın ve http.Client ile json.NewDecoder için kullanıma hazır türler alın.
gRPC Gateway Modelleri
Bir Go servisi hem gRPC hem de REST uç noktaları sunduğunda, JSON yükleriyle eşleşen Go struct'larına ihtiyacınız vardır. JSON yapısını protobuf tanımlarınızla eşleşen struct'lara dönüştürün.
DevOps Yapılandırma Ayrıştırma
JSON yapılandırma dosyalarını (Terraform çıktıları, Kubernetes manifest'leri, CI/CD boru hattı yapılandırmaları) özel araçlar ve otomasyon betikleri için türlendirilmiş Go struct'larına dönüştürün.
Veri Boru Hattı İşleme
Mesaj kuyruklarındaki (Kafka, RabbitMQ, SQS) veya veri göllerindeki JSON kayıtları için Go struct'ları oluşturun. Türlendirilmiş struct'lar, şema değişikliklerini çalışma zamanı yerine derleme zamanında yakalar.
Test Sabiti Kurulumu
JSON test sabitlerini tablo güdümlü testler için Go struct'larına dönüştürün. Tür güvenli sabitler, test hatalarını ham map[string]interface{}} onaylarından çok daha kolay teşhis etmenizi sağlar.
Go'nun Tür Sistemini Öğrenme
Dinamik dillerden gelen öğrenciler ve geliştiriciler, tanıdık JSON yapıştırarak Go'nun aynı veriyi açık türler, işaretçiler ve struct etiketleriyle nasıl temsil ettiğini görebilir.

JSON'dan Go'ya Tür Eşleme

encoding/json paketi, JSON değerlerini Go türlerine eşlerken belirli kurallar izler. Aşağıdaki tablo varsayılan eşlemeyi ve yaygın alternatifleri göstermektedir. "Varsayılan" sütunu çoğu üreticinin ürettiği türdür. "Alternatif" sütunu, büyük kimlikler için int64 veya null olabilen alanlar için işaretçi türleri gibi gereksinimlerinize göre tercih edebileceğiniz türleri gösterir.

JSON TürüÖrnekVarsayılanAlternatif
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 Etiketi Başvurusu

Struct etiketleri, encoding/json'ın alanları nasıl serileştirip seri dışı bıraktığını denetler. json etiketi açık ara en yaygın olanıdır; ancak aynı alan üzerinde diğer etiketlerle (db, yaml, xml) birleştirilebilir. Etiket sözdizimi, alan türünden sonra gelen backtick sınırlı bir dizgedir. İşte encoding/json'ın desteklediği json etiketi seçenekleri.

EtiketDavranışKullanım Durumu
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 ve json.NewDecoder

Go, JSON'ı çözümlemek için iki yol sunar: bayt dilimleri için json.Unmarshal ve io.Reader akışları için json.NewDecoder. Her ikisi de aynı struct etiketi kurallarını kullanır; ancak ne zaman tercih edileceği konusunda farklılaşırlar.

json.Unmarshal
Bir []byte alır ve bir struct'ı doldurur. io.ReadAll ile okunan HTTP yanıt gövdeleri, dosya içerikleri veya test sabitleri gibi tamamen bellekte olan JSON için idealdir. JSON hatalı biçimlendirilmişse veya türler eşleşmiyorsa hata döndürür.
json.NewDecoder
Bir io.Reader'ı sarar ve JSON token'larını geldikçe çözümler. Doğrudan okunan HTTP yanıt gövdeleri, yeni satırla ayrılmış JSON (NDJSON) günlükleri veya tamamen belleğe yüklemek istemediğiniz büyük dosyalar gibi akış kaynakları için idealdir. Çok nesne akışları için More() ile bir döngü içinde Decode() çağrısı yapın.

Kod Örnekleri

Bu örnekler, JSON'dan üretilen Go struct'larının gerçek programlarda nasıl kullanılacağını ve bunların diğer dillerden nasıl üretileceğini göstermektedir. Go örnekleri, standart kütüphaneden encoding/json kullanır.

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
}

Sıkça Sorulan Sorular

json.Unmarshal ile json.Decode arasındaki fark nedir?
json.Unmarshal, tam JSON belgesini içeren bir []byte alır ve bir struct'ı doldurur. json.NewDecoder bir io.Reader'ı sarar ve JSON'ı artımlı olarak çözümler. Tam JSON halihazırda bellekteyse (örneğin io.ReadAll'dan sonra) Unmarshal kullanın. Bir HTTP yanıt gövdesinden, dosyadan veya tüm yükü arabelleğe almaktan kaçınmak istediğiniz herhangi bir akış kaynağından doğrudan okurken NewDecoder kullanın.
Go, yük içinde eksik JSON alanlarını nasıl işler?
Eksik JSON alanları, karşılık gelen Go struct alanını sıfır değerinde bırakır: dizgeler için "", sayılar için 0, bool'lar için false, işaretçiler ve dilimler için nil. "Alan eksik" ile "alan mevcut ama sıfır" arasında ayrım yapmanız gerekiyorsa *int veya *string gibi bir işaretçi türü kullanın. nil işaretçi alanın yokluğunu; sıfır değerli nil olmayan işaretçi ise alanın açıkça 0 veya "" olarak ayarlandığını gösterir.
JSON için Go struct alanlarının dışa aktarılmış (büyük harfle başlayan) olması neden gereklidir?
encoding/json paketi struct alanlarına erişmek için yansıma kullanır; Go'nun yansıma kuralları ise yalnızca dışa aktarılmış (büyük harfle başlayan) alanlara erişime izin verir. Bir alan küçük harfle başlıyorsa encoding/json onu göremez ve hem serileştirme hem de seri dışı bırakma sırasında sessizce atlar. Dışa aktarılmış bir PascalCase alanını küçük harfli bir JSON anahtarıyla eşleştirmek için json struct etiketini kullanın.
Go'da snake_case JSON anahtarlarını nasıl işlerim?
Tam JSON anahtar adıyla bir json struct etiketi ekleyin. Örneğin "user_name" adlı bir JSON alanı, `json:"user_name"` etiketiyle UserName adlı bir Go alanına eşlenir. Üretici bunu otomatik olarak halleder. encoding/json'da adlandırma ilkesi belirlemek için global bir seçenek yoktur; her alanın kendi etiketini bildirmesi gerekir.
Null değerler içeren JSON'ı Go'ya dönüştürebilir miyim?
Evet. Null JSON değerleri Go'da işaretçi türlerine eşlenir. Örneğin "age": null ifadesi Age *int `json:"age"` olur. JSON değeri null olduğunda Go işaretçisi nil'dir. Bir değer taşıdığında Go bir int ayırır ve işaretçi bu değeri gösterir. Her zaman null olabilen alanlar için işaretçi kullanmak Go'da deyimsel yaklaşımdır.
JSON, Go'nun int türünün tutabileceğinden büyük bir sayı içeriyorsa ne olur?
Go'nun int türü platforma bağımlıdır (32 bit sistemlerde 32 bit, 64 bit sistemlerde 64 bit). JavaScript zaman damgaları veya veritabanı kimlikleri gibi büyük sayılar için int64 kullanın. JSON sayısının ondalık basamakları varsa float64 kullanın. float64 hassasiyetini aşan sayılar için (örneğin büyük finansal değerler) ham dize gösterimini saklayan ve kendiniz ayrıştırmanıza olanak tanıyan json.Number kullanın.
Bu araç ile JSON-to-Go-Struct arasında fark var mı?
Bu araç; doğru struct etiketleri, uygun tür çıkarımı ve iç içe yapılar ile dizilerin işlenmesi gibi encoding/json kullanım kalıplarına odaklanarak Go tür tanımları üretir. Bu sitedeki JSON to Go Struct aracı struct iskeleti oluşturmaya odaklanır. Her ikisi de geçerli Go kodu üretir. İş akışınıza hangisi uyuyorsa onu kullanın. Bu sayfadaki struct etiketi başvurusu ve tür eşleme tabloları, hangi üreticiyi seçerseniz seçin işe yarar.