İçeriğe geç

JSON'dan Go Yapılarına Dönüştürücü

JSON verisinden bir json-to-go uyarlamasıyla Go struct tanımları üretir ve gofmt ile biçimlendirir. Anahtarlar json:"..." etiketli, dışa aktarılan CamelCase alanlara dönüşür; iç içe nesneler satır içi adsız struct, null ise any olur.

Üçüncü taraf REST API yanıtını json.Unmarshal ile okumak için struct yazmak.

JSON

Ne zaman kullanılır?

  • Üçüncü taraf REST API yanıtını json.Unmarshal ile okumak için struct yazmak.
  • Örnek verilerden bir Go HTTP işleyicisi için istek ve yanıt türlerini hazırlamak.

Nasıl kullanılır?

  1. Soldaki düzenleyiciye bir JSON nesnesi veya dizisi yapıştırın.
  2. Üretilen struct'ı inceleyin; kök türün adı her zaman AutoGenerated olur.
  3. Paketinize kopyalayın, türü yeniden adlandırın ve tekrar kullanacaksanız satır içi struct'ları adlandırılmış türlere çıkarın.

JSON

{
  "id": 42,
  "user_name": "ada",
  "score": 9.5,
  "active": true,
  "deleted_at": null,
  "tags": ["go", "json"],
  "address": { "city": "Tokyo", "zip": "100-0001" }
}

Go struct

type AutoGenerated struct {
	ID        int      `json:"id"`
	UserName  string   `json:"user_name"`
	Score     float64  `json:"score"`
	Active    bool     `json:"active"`
	DeletedAt any      `json:"deleted_at"`
	Tags      []string `json:"tags"`
	Address   struct {
		City string `json:"city"`
		Zip  string `json:"zip"`
	} `json:"address"`
}

Ayrıntılar ve sınırlamalar

Üretim tarayıcıda yapılır. Tür adı, satır içi veya adlandırılmış struct seçimi ve etiketler için ayar yoktur.

Kısaltmalar büyük harfle yazılır (id, ID olur), snake_case ise CamelCase'e dönüşür; özgün anahtar json etiketinde korunur.

Tam sayılar int (büyükse int64), ondalıklılar float64 olur. null, boş ve karma diziler any veya []any olur.

Dizideki nesneler farklıysa bazı nesnelerde bulunmayan anahtarlara ,omitempty eklenir.

FAQ

Kökteki bir JSON dizisini dönüştürebilir miyim?

Evet. Dizideki tüm nesnelerin alanlarını birleştirerek type AutoGenerated []struct{...} üretir.

null alanım neden any türünde?

null değeri tür bilgisi taşımaz. nil desteğini korumak için any yerine *string veya *time.Time gibi bir işaretçi kullanın.

Adlandırılmış iç içe struct üretir mi?

Hayır. İç içe nesneler satır içi adsız struct olur. Başvuru yapmanız gerekiyorsa bunları elle adlandırılmış türlere taşıyın.

Teknik özellikler ve kaynaklar