JSON'dan Go Yapısına
Bir JSON örneği yapıştırın ve encoding/json ile sorunsuz ayrıştırılabilen Go yapı tanımlarını alın. Alanlar dışa aktarılır (CamelCase), orijinal JSON anahtarlarıyla etiketlenir, bir değer null olabildiğinde işaretçiye yükseltilir ve iç içe nesneler kendi adlandırılmış yapı bildirimlerini alır.
JSON, Go yapısına nasıl dönüştürülür
-
1
JSON'u yapıştırın
Tek bir örnek yeterlidir. Birden fazla örnek, null olabilen alanların çıkarımını iyileştirir.
-
2
Adlandırmayı seçin
Dışa aktarılan alanlar için PascalCase, Go'nun kuralıdır. Kısaltma biçimini seçin (`URL`'ye karşı `Url`, `ID`'ye karşı `Id`).
-
3
İsteğe bağlı stratejiyi seçin
Null olabilen alanlar için işaretçileri (en özgün yol) veya `omitempty` etiketlerini kullanın.
-
4
Yapıları kopyalayın
Bir kök yapı ve iç içe olanlar. Bir `.go` dosyasına yapıştırın ve `go build` çalıştırın.
Örnek çıktı
Şunun için:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Çıktı:
type User struct {
FirstName string `json:"first_name"`
Age int `json:"age"`
Email *string `json:"email"`
Tags []string `json:"tags"`
}
Tür eşlemesi
| JSON değeri | Go türü |
|---|---|
| karakter dizisi | string |
| tam sayı | int veya int64 |
| sayı (ondalık) | float64 |
| mantıksal değer | bool |
| null (null olmayan bir kardeşi varken) | *T (işaretçi) |
| dizi | []T |
| nesne | Adlandırılmış yapı |
| karışık dizi | []interface{} |
Üreticinin izlediği adlandırma kalıpları
- Kısaltmalar büyük harfle:
id→ID,url→URL,api_key→APIKey. Bu, Go’nun önerilen stiline vego vet/staticcheckkurallarına uygundur. - snake_case JSON → PascalCase alanları:
first_name→FirstName. - Tek kelimelik kısaltmalar korunur:
IP,IPolarak kalır;HTTP,HTTPolarak kalır. - JSON etiketi:
json:"first_name"orijinal anahtarı korur; böylece kodlama iki yönde de temiz çalışır.
İsteğe bağlı alanlar: işaretçi mi yoksa omitempty mi?
| Strateji | Ne zaman kullanılır |
|---|---|
İşaretçi (*T) |
“Yok” ile “sıfır değer” arasında ayrım yapmanız gerekir |
omitempty |
Marshal sırasında yalnızca sıfır değerlerini atlamak istersiniz; unmarshal, eksik değerler için sıfır saklar |
| Hiçbiri | Alan her zaman mevcuttur ve sıfır değerler anlamlıdır |
Üretici, null olarak görülen her şey için varsayılan olarak işaretçi + omitempty kullanır; anlamına göre ayarlayın.
Yaygın hatalar
- 32 bit hedefte JSON tam sayısı
MaxInt32’yi aştığındaintkullanmak. Bilinen büyük değerler içinint64kullanın. - Geri marshal edip anahtar sırasını kaybetmek.
encoding/json, anahtarları orijinal JSON sırasında değil, alan bildirim sırasına göre üretir. Kanonik bir çıktıya ihtiyacınız varsa elle sıralayın. - Karışık biçimli diziler.
[]interface{}tür güvenliğini yitirir. Bunun yerine birtypeayırıcı alanı olan birleşim türlerini düşünün. - İsteğe bağlı alanlarda
omitempty’yi unutmak. Bu olmadan, isteğe bağlı alanlar atlanmak yerine"foo": nullolarak serileştirilir.
Sık Sorulan Sorular
“Alan yok” ile “alan sıfır” durumunu ayırt etmeniz gerektiğinde işaretçi kullanın. Sıfır değeri geçerli bir iş değeri değilse omitempty kullanın ("", 0 ve false her zaman “bunu atla” anlamına gelir). Birçok ekip birini seçip tüm kod tabanında tutarlı biçimde uygular.
Her iç içe nesne, ayrı bir adlandırılmış yapı bildirimine dönüşür (örneğin User → Address). Türler yalnızca iç içe yapı çok küçük ve bir kez kullanılıyorsa satır içine alınır; aksi hâlde temiz ve yeniden kullanılabilir türler elde edersiniz.
Evet. id, ID’ye; url, URL’ye; api_key, APIKey’e dönüşür. Bu, go vet’in beklediği ve çoğu Go stil kılavuzunun önerdiği şeydir.
Üretici, standart json: etiketleri olan basit yapılar üretir. Özel UnmarshalJSON uygulamalarını (örneğin ISO dışı biçimlerdeki tarihler için) üretimden sonra elle ekleyin.
İlgili Araçlar
ASCII Tablosu Referansı
NUL, LF ve DEL dahil her kod için ondalık, onaltılık, sekizlik ve ikili değerlerle HTML sayısal karakter başvurusu gösterimini sunan tam ASCII tablosu.
HTML Karakter Referansı
HTML varlıklarının aranabilir listesi; adlandırılmış ve sayısal kodlarıyla birlikte özel karakter ve semboller için tek tıkla kopyalama.
FPS Sayacı
requestAnimationFrame ile tarayıcı FPS değerini ölçün: yumuşatma, en düşük ve en yüksek kare hızı, uyarı eşiği ve isteğe bağlı grafik. Yerel çalışır, yükleme ve API yoktur.
Klavye kısayolları başvurusu
macOS, Windows ve Linux’ta VS Code, Chrome ve GNU Readline kullanan Bash için belgelenmiş varsayılan kısayolları arayın.
EditorConfig Oluşturucu
Girinti stili ve boyutu, satır sonu, karakter kümesi ve boşluk kurallarınızla bir .editorconfig dosyası oluşturarak IDE ve editörler arasında tutarlı biçimlendirme sağlayın.
E-posta Doğrulayıcı
Bir e-posta adresini doğrulayın: RFC 5322 sözdizimi kontrolü, canlı MX kaydı sorgulama, ayrıca yerel kısım, alan adı ve uzunluk bilgileri. Hiçbir e-posta gönderilmez.
Araç diğer dillerde mevcuttur
- JSON ke Struktur Go [ID]
- JSON thành cấu trúc [VI]
- JSON a Estructura Go [ES]
- JSON vers Go Struct [FR]
- JSON을 Go 구조체로 변환 [KO]
- JSON naar Go-structuur [NL]
- JSON till Go-struktur [SV]
- JSON→Go構造体 [JA]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON إلى بنية Go [AR]
- JSON zu Go Struct [DE]
- JSON na strukturę Go [PL]
- JSON para Estrutura Go [PT]
- JSON in Struttura Go [IT]
- JSON в структуру данных [RU]
- JSON 至Go结构 [ZH]
- JSON to Go Struct [EN]