JSON'dan Go'ya
İçerik yok
JSON'u sola yapıştırın, Go projelerinde doğrudan kullanılmaya hazır Go struct tür tanımları sağda otomatik olarak oluşturulur. Saf tarayıcı yerel işleme, kayıt veya yükleme gerekmez.
İçerik yok
JSON'u sola yapıştırın, Go projelerinde doğrudan kullanılmaya hazır Go struct tür tanımları sağda otomatik olarak oluşturulur. Saf tarayıcı yerel işleme, kayıt veya yükleme gerekmez.
JSON'dan Go'ya, JSON biçimindeki verileri otomatik olarak Go dilinin struct tür tanımlarına dönüştürme işlemidir. JSON, REST API'lerde, yapılandırma dosyalarında, mesaj kuyruklarında ve günlüklerde en yaygın veri değişim biçimidir, Go ise güçlü tipli bir dildir; geliştirme sırasında JSON'un dinamik yapısının genellikle encoding/json ile deserileştirmeden önce struct ile eşlenmesi gerekir. Struct'ları elle yazmak, özellikle iç içe nesnelerde, eksik alanlara veya yanlış türlere kolayca yol açar; bu araç tekrarlayan işleri otomatikleştirmeyi amaçlar.
Go'nun struct'ı `type Name struct { ... }` ile bildirilen bileşik bir veri türüdür. Her alan ad ve türden oluşur; diğer paketler tarafından erişilebilir olması için alan adlarının büyük harfle başlaması gerekir, buna 'dışa aktarılan tanımlayıcılar' denir. Araç, JSON alan adlarını otomatik olarak PascalCase dışa aktarılan alan adlarına dönüştürür, örneğin `user_name` `UserName` ile eşlenir, orijinal anahtar json etiketinde korunur.
Bu aracın temel dönüşümü, tarayıcı içi jsonFormat Web Worker tarafından gerçekleştirilir, quicktype-core'un Go oluşturucusunu `just-types` ve `no-comments` seçenekleriyle çağırır. Tüm işlem arka uç hizmetlerine bağlı değildir: girilen JSON yerel olarak ayrıştırılır, türler çıkarılır, Go kodu oluşturulur ve son olarak sağ düzenleyicide sunulur.
Tür çıkarımı geleneksel JSON'dan Go'ya eşlemeyi izler: dizeler `string` ile, boolean'lar `bool` ile, tamsayılar `int64` ile, kayan noktalı sayılar `float64` ile, diziler `[]T` dilimleriyle, nesneler bağımsız struct'larla, `null` `interface{}` ile eşlenir. İç içe nesneler özyinelemeli olarak işlenir, net hiyerarşi korunur.
Elle yazmaya kıyasla, araç tarafından oluşturulan kod 'çalıştırılabilir ilk taslaktır'. Geliştiricilerin genellikle gerçek Go projelerine yerleştirmeden önce yalnızca kök tür adını, paket adını, alan tür hassasiyetini (örn. int64'den int'e) ve işaretçi türlerinin kullanılıp kullanılmayacağını ince ayarlaması gerekir. Tek tıklamayla kopyalama ve model.go indirme ile birlikte, entegrasyon ve modelleme aşamalarındaki tekrarlayan iş önemli ölçüde azalır.
Oluşturulan struct'ı projeye kopyaladıktan sonra, API yanıtını encoding/json ile doğrudan deserileştirin.
package main
import (
"encoding/json"
"fmt"
)
// 以下代码由 GeekFormat JSON 转 Go 工具生成
type User struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
}
func main() {
data := []byte(`{
"id": 1,
"name": "Alice",
"tags": ["admin", "dev"],
"address": {"city": "Beijing"}
}`)
var u User
if err := json.Unmarshal(data, &u); err != nil {
panic(err)
}
fmt.Println(u.Name, u.Address.City)
}Bazı API alanları mevcut değilse, ilgili alanları işaretçi türlerine değiştirin veya omitempty etiketiyle kullanın.
package main
import "encoding/json"
// 手动将字段改为指针,缺失时值为 nil
type User struct {
ID *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Email *string `json:"email,omitempty"`
}
func main() {
data := []byte(`{"id": 1, "name": "Bob"}`)
var u User
json.Unmarshal(data, &u)
if u.Email == nil {
println("Email 字段缺失")
}
}JSON içeriğini sol giriş kutusuna yapıştırın, araç 400ms içinde otomatik olarak dönüştürecek ve sağda oluşturulan Go struct'ı görüntüleyecektir. Ayrıca .json/.txt dosyalarını sürükleyip bırakabilir veya yerleşik verileri yüklemek için 'Örnek'e tıklayabilirsiniz. Dönüşümden sonra model.go dosyasını tek tıklamayla kopyalayabilir veya indirebilirsiniz.
Evet. Araç quicktype-core'a dayalı olarak Go kodu oluşturur ve varsayılan olarak her struct alanı encoding/json'ın Unmarshal/Marshal'ı ile doğrudan serileştirme ve deserileştirme için uygun olan `json:"orijinal_alan_adı"` etiketiyle gelir.
Evet. JSON dizileri, öğe türlerine göre karşılık gelen dilim türleri oluşturur, örneğin `["a","b"]` `[]string` oluşturur, `[1,2,3]` `[]int64` oluşturur, `[{...},{...}]` `[]UserItem` gibi özel türler oluşturur.
Evet. Her iç içe nesne, PascalCase olarak adlandırılan bağımsız bir struct türünü özyinelemeli olarak oluşturur. Örneğin, `address` nesnesi bir `Address` struct'ı oluşturur, ana struct'ta `Address Address` alanı aracılığıyla başvurulur.
JSON'daki null değerler genellikle güvenli yedek tür olan `interface{}` olarak çıkarılır. Alanın gerçek türünü biliyorsanız, JSON'a örnek bir değer ekleyebilir, yeniden oluşturabilir ve ardından manuel olarak belirli türe ayarlayabilirsiniz.
Evet. Araç varsayılan olarak kök tür adını (User gibi) kullanır; ayarlarda kök tür adını değiştirdikten sonra, ilişkili tüm alt tür adları eşzamanlı olarak güncellenir, indirilen dosya adı da buna göre değişir.
Araç JSON geçerliliğini otomatik olarak algılar. Sondaki virgüller, tek tırnaklar, eksik tırnaklar gibi yaygın hatalar varsa, 'JSON'u Onar' düğmesi görünür. Tıklandığında araç otomatik onarım deneyecek ve Go struct'ı yeniden oluşturacaktır; onarım başarısız olursa belirli hata konumu verilir.
Hayır. Tüm JSON ayrıştırma, tür çıkarımı ve Go kodu oluşturma Web Worker aracılığıyla tarayıcınızda tamamlanır; girilen içerik ve oluşturulan kod hiçbir sunucuya yüklenmez veya buluta kaydedilmez. API anahtarları, belirteçler veya iş verileri içeren hassas JSON güvenle kullanılabilir.
Evet. Oluşturulan kod json etiketli standart Go struct'tır, doğrudan projenin types/ veya models/ dizinine kopyalanabilir. Proje adlandırma kurallarına göre tür adlarını ve paket adlarını ince ayarlamanızı öneririz.
Tamamen ücretsiz, kayıt veya giriş gerekmez. Sayfayı açın ve hemen kullanın, özellik sınırı, filigran veya zorunlu giriş yok.
Aracın katı bir dosya boyutu sınırı yoktur, ancak dönüşüm hızı ve oluşturma performansı tarayıcı ve cihaz performansına bağlıdır. En iyi deneyim için 1MB içindeki JSON'u işlemenizi öneririz; çok büyük JSON için önce JSON biçimlendirici veya bölme aracıyla işleyin.
Hayır. Araç tamsayıları ve kayan noktalı sayıları ayırt eder: tamsayı alanları int64 oluşturur, kayan nokta alanları float64 oluşturur. int, uint64 gibi daha belirli türleri tercih ediyorsanız, oluşturmadan sonra manuel olarak değiştirin.
Sol giriş kutusu boş veya yalnızca boşluk karakterleri içeriyor. Lütfen geçerli JSON yapıştırın, veya verileri yüklemek için 'Örnek'i tıklayın, veya .json/.txt dosyalarını sürükleyip bırakın.
Giriş kutusunun altındaki 'JSON'u Onar' düğmesini tıklayın; araç sondaki virgülleri, tek tırnakları, eksik tırnakları, JS tarzı nesneleri ve diğer sorunları otomatik olarak düzeltmeye çalışacaktır. Değiştirilen sonuç onarımdan sonra vurgulanacaktır.
Araç JSON anahtarlarından PascalCase alan adları oluşturur. Anahtarlar Çince veya özel karakterler içeriyorsa, kaçışlı alan adları oluşturulabilir. JSON anahtarlarını küçük harf İngilizce veya snake_case olarak değiştirmenizi, ardından oluşturmadan sonra tek tip ayarlamanızı öneririz.
null belirli türü çıkaramadığından, araç yedek olarak interface{} kullanır. Bu alana kaynak JSON'da örnek bir değer ("" veya 0 gibi) verebilir, yeniden oluşturabilir ve ardından türü string/int64 gibi gerçek türe değiştirebilirsiniz.
Çok büyük JSON ve çok sayıda struct'ın tarayıcıda oluşturulması önemli miktarda bellek tüketir. Öneriler: ① Örnek JSON'da yalnızca anahtar alanları koruyun; ② Birden fazla nesneye bölün ve ayrı ayrı dönüştürün; ③ Tarayıcıdaki diğer bellek yoğun sekmeleri kapatın.
Dizi boş [] olduğunda veya öğe türleri tutarsız olduğunda, araç yedek olarak interface{} kullanır. Aynı türden örnek öğeler ekleyebilir veya oluşturmadan sonra türü manuel olarak []string, []int64 gibi belirli dilim türlerine değiştirebilirsiniz.
Bu araç, JSON değer türüne dayalı olarak karşılık gelen Go türlerini otomatik olarak çıkarır; yaygın eşlemeler aşağıdadır:
| JSON Değer Örneği | Oluşturulan Go Türü | Not |
|---|---|---|
"hello" | string | Doğrudan dize eşlemesi |
true / false | bool | Boolean değer |
42 | int64 | Ondalık noktası olmayan sayı |
3.14 | float64 | Ondalık noktalı sayı |
null | interface{} | Belirli tür çıkarılamadığında güvenli yedek |
["a","b"] | []string | Dize dizisi |
[1,2,3] | []int64 | Tamsayı dizisi |
[{...},{...}] | []UserItem | Nesne dizisi, öğe türleri özyinelemeli olarak oluşturulur |
{"id":1} | User | Nesne bağımsız struct oluşturur |
Araç varsayılan olarak int64 ve float64 kullanır; gerçek projelerde ihtiyaca göre ayarlayın:
| Senaryo | Önerilen Tür | Neden |
|---|---|---|
| Genel tamsayı kimlikleri, sayaçlar | int64 | Araç varsayılanıyla tutarlı, çoğu JSON sayısıyla uyumlu |
| Veritabanı otomatik artan PK'sının pozitif olduğu biliniyor | uint64 | Negatif sayılardan kaçınır, daha net anlambilim |
| 32-bit sistemler veya açıkça küçük aralıklı tamsayılar | int32 | Bellek kullanımını azaltır |
| Fiyatlar, koordinatlar, bilimsel hesaplamalar | float64 | Araç varsayılanıyla tutarlı, standart kayan nokta hassasiyeti |
| Hassas para birimi hesaplaması | decimal.Decimal / int | float64 hassasiyet riski taşır; shopspring/decimal veya sent birimi olarak int önerilir |
Bu JSON'dan Go'ya aracının tüm işlemesi tamamen tarayıcınızda yerel olarak tamamlanır: JSON ayrıştırma, tür çıkarımı, Go kodu oluşturma Web Worker aracılığıyla istemci tarafında yürütülür; girilen JSON içeriği, yüklenen dosyalar ve oluşturulan Go kodu hiçbir sunucuya yüklenmez, buluta kaydedilmez, önbelleğe alınmaz veya depolanmaz. Sayfayı kapattıktan veya yeniledikten sonra tüm giriş ve çıkış içeriği bellekten otomatik olarak temizlenir, yalnızca localStorage son giriş geçmişinizi korur (istediğiniz zaman temizlenebilir). API anahtarları, belirteçler, hassas iş verileri içeren JSON'u işlemek için uygundur.