Ne işe yarar
JSON’dan Go’ya dönüştürücü bir JSON örneğini okur ve encoding/json için hazır, json etiketli Go struct tanımları yazar. Çağırdığınız API’nin yanıtını yapıştırın; her alanı ve etiketi elle yazmadan hemen json.Unmarshal ile kullanabileceğiniz türleri alın.
Dönüştürücü örnekteki her değeri inceler. İç içe nesneler kendi yapılarına dönüşür, bir dizinin tüm öğeleri tek bir öğe türünde birleştirilir ve bazı öğelerde eksik olan ya da bazen null olan alanlar isteğe bağlı olarak algılanır. Çıktı gofmt’un yapacağı gibi hizalanır.
Nasıl kullanılır
- JSON’ı giriş alanına yapıştırın, bir
.jsondosyası yükleyin veya Örnek düğmesine tıklayın. - Kök tür adını belirleyin; iç içe nesnelerin nasıl yazılacağını, hangi alanlara
omitemptyekleneceğini ve null olabilen alanların işaretçi kullanıp kullanmayacağını seçin. - Go kodunu kopyalayın veya
.godosyası olarak indirippackagesatırınızı ekleyin.
Geçersiz JSON, sorunun satır ve sütunuyla bildirilir.
Örnek
Bu JSON:
{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }
şu yapılara dönüşür:
type Root struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Tags []string `json:"tags"`
Profile Profile `json:"profile"`
}
type Profile struct {
AvatarURL string `json:"avatar_url"`
}
İpuçları
- Tek bir örnek yalnızca içerdiğini gösterir. Bir değer sayı veya metin olabiliyorsa ikisini de ekleyin ya da birleştirilmeleri için birkaç örneği bir diziye koyun.
- Zaman damgaları metin olarak gelir. Biçim RFC 3339 ise türü kendiniz
time.Timeolarak değiştirin. - Alanları tamamen aynı olan nesneler tek bir yapıyı paylaşır; böylece aynı biçim birkaç yerde geçtiğinde çıktı kısa kalır.
- TypeScript de mi yazıyorsunuz? JSON’dan TypeScript’e üretici aynı çıkarımla arayüzler oluşturur.
SSS
› Alan adları nasıl seçilir?
Her JSON anahtarı PascalCase biçiminde dışa aktarılan bir Go adına dönüşür ve yaygın kısaltmalar golint'in beklediği gibi büyük harfle yazılır; böylece user_id UserID, avatar_url ise AvatarURL olur. Özgün anahtar json etiketinde kalır, bu sayede encoding/json alanları tam olarak eşler.
› Hangi Go türleri kullanılır?
Metinler string, tam sayılar int (bir değer 32 bite sığmazsa int64), ondalıklı sayılar float64 ve mantıksal değerler bool olur. Diziler slice, boş nesneler map[string]any, yalnızca null olan ya da birkaç türü karıştıran değerler any olur.
› Adlandırılmış ve satır içi yapılar arasındaki fark nedir?
Adlandırılmış modda her iç içe nesne Address veya Order gibi ayrı bir tür olarak yazılır; bu da yeniden kullanmayı ve test etmeyi kolaylaştırır. Satır içi mod, adsız struct türlerini doğrudan üst yapının içine koyar ve her şeyi tek bir bildirimde tutar; birçok hızlı dönüştürücü böyle yapar.
› omitempty ne zaman eklenir?
Varsayılan olarak yalnızca isteğe bağlı alanlara, yani bir dizideki bazı nesnelerde eksik olan veya bazen null olan alanlara eklenir. Tüm alanlara ya da hiçbirine eklemeyi de seçebilirsiniz. Eksik veya null bir değeri sıfır değerden ayırmak için işaretçileri açın.
› JSON'ım yükleniyor mu?
Hayır. Yapılar tarayıcınızda üretilir ve hiçbir şey sunucuya gönderilmez.