logo
GeekFormat

JSON'dan Go'ya

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.

İlgili Öneriler

JSON'dan Go'ya hakkında: JSON'u Go'nun güçlü tipli struct'ına dönüştürme

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.

Kullanım senaryoları

  • Go backend geliştirme, REST API yanıtı JSON'unu struct'a dönüştürür, json.Unmarshal ile Gin/Echo/Fiber işleyici parametrelerine doğrudan bağlar
  • Frontend-backend entegrasyonu sırasında Postman'dan örnek yanıt JSON'u alır, manuel alan yazımını azaltmak için hızla Go modeli oluşturur
  • Üçüncü taraf Webhook geri aramalarını entegre ederken, yük JSON'unu alan düzeyinde erişim ve doğrulama için uygun şekilde Go struct'a dönüştürür
  • Viper/Consul/Nacos'tan JSON yapılandırma dosyalarını Go türlerine dönüştürür, zayıf tipli map[string]interface{} erişimini değiştirir
  • Mikro hizmet ekipleri gRPC/HTTP arayüzleri için istek/yanıt yapısını birleştirir, örnek JSON'u paylaşılan Go türlerine dönüştürür
  • Test mühendisleri JSON fixture'ı Go struct'a dönüştürür, assertion odaklı test için testify ile kullanır
  • DevOps, ELK/Fluentd tarafından toplanan JSON günlük satırlarını analiz eder, Go programlarıyla yapılandırılmış analiz için struct oluşturur
  • Web kazıyıcılar JSON verilerini topladıktan sonra Go struct'a dönüştürür, veritabanı modelleri oluşturmak için gorm/gen veya ent ile çalışır
  • IoT cihazları tarafından bildirilen JSON telemetri verileri Go struct'a dönüştürülür, uç ağ geçidi programlarında deserileştirme ve filtreleme
  • Kafka/NATS/RabbitMQ'dan tüketilen JSON mesajlarını olay güdümlü tüketici uygulaması için Go türlerine dönüştürür
  • SDK geliştiricileri sunucu örnek yanıt JSON'unu Go struct'a dönüştürür, kullanıcıların başvurması için istemci kitaplığının types paketine yazar
  • Swagger/OpenAPI belgelerindeki örnek JSON'u arayüz belgesi kod örnekleri olarak Go struct'a dönüştürür
  • Öğrenciler veya eğitmenler Go kursları sırasında örnek JSON'u struct'a dönüştürür, Go'nun tür sistemini ve json etiketi kullanımını gösterir
  • Veri taşıma betikleri MySQL/PostgreSQL'den dışa aktarılan JSON satırlarını alan eşleme ve tür doğrulama için Go struct'a dönüştürür
  • CI/CD yapılandırma JSON'u Go struct'a dönüştürülür, Go ile yazılmış işlem hattı araçlarında güçlü tipli yapılandırma okuma için uygun
  • Eski projeler dinamik map tabanlı JSON okuma kodunu güçlü tipli struct tabanlı erişime yeniden düzenler

Nasıl Kullanılır

  1. Sol düzenleyicide JSON içeriğini yapıştırın, veya .json/.txt dosyalarını sürükleyip bırakın, veya yerleşik verileri yüklemek için 'Örnek'e tıklayın.
  2. Yaklaşık 400ms bekleyin, araç otomatik olarak dönüştürecek ve sağda oluşturulan Go struct kodunu görüntüleyecektir.
  3. JSON'da hata varsa, yaygın biçim hatalarını otomatik olarak düzeltmek için 'JSON'u Onar' düğmesini tıklayın, ardından oluşturmaya devam edin.
  4. Sağ çıktıyı kontrol edin, Go projesine yapıştırmak için 'Kopyala'yı tıklayın, veya model.go dosyası olarak kaydetmek için 'İndir'i tıklayın.

Özellikler

  • Tarayıcıda yerel Go struct oluşturma: JSON ayrıştırma ve Go kodu oluşturma tarayıcı içinde tamamlanır, ham veriler sunucuya yüklenmez
  • 400ms debounced otomatik dönüşüm: Yapıştırdıktan veya değiştirdikten sonra manuel tıklama gerekmez, kopyalanabilir Go kodu sağda gerçek zamanlı olarak çıkar
  • Akıllı tür çıkarımı: dizeler string'e, boolean'lar bool'a, tamsayılar int64'e, kayan noktalı sayılar float64'e, diziler dilimlere, nesneler struct'lara eşlenir
  • İç içe nesneler otomatik genişletilir: Bağımsız struct türlerini özyinelemeli olarak oluşturur, net JSON hiyerarşisini korur
  • Otomatik oluşturulan json etiketleri: Alanlar `json:"orijinal_alan_adı"` etiketleriyle gelir, encoding/json ile kullanıma hazırdır
  • Tek tıklamayla JSON hatası onarımı: Sondaki virgülleri, tek tırnakları, eksik tırnakları ve diğer yaygın biçim hatalarını otomatik olarak işler, onarımdan sonra oluşturmaya devam eder
  • Yapıştır/yükle/örnek girişini destekler: .json/.txt dosyalarını sürükleyip bırakarak yükleyin veya yerleşik örnekleri yükleyin
  • Tek tıklamayla kopyalama ve indirme: Tüm Go kodunu panoya kopyalayın veya doğrudan projeye model.go dosyası olarak indirin
  • localStorage giriş geçmişi: Son girişleri otomatik olarak kaydeder, yenilemeden veya yanlışlıkla sayfayı kapattıktan sonra hızlı kurtarma
  • Duyarlı bölünmüş ekran düzenleyici: Ayarlanabilir sol/sağ panel genişliği, masaüstü ve mobilde rahat giriş/çıkış görüntüleme

Kod Örnekleri

Oluşturulan struct ile JSON'u deserileştir

go

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)
}

Potansiyel olarak eksik alanlara sahip JSON'u işleme

go

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 字段缺失")
    }
}

Sık Sorulan Sorular

JSON nasıl Go struct'a dönüştürülür?

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.

Oluşturulan Go kodu json etiketleri içeriyor mu?

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.

JSON dizileri Go dilimlerine dönüştürülecek mi?

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.

İç içe nesneler birden fazla struct oluşturacak mı?

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.

null değerleri hangi türü oluşturur?

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.

Kök struct adını özelleştirebilir miyim?

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.

JSON'da biçim hataları varsa ne yapmalı?

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.

Veriler sunucuya yüklenecek mi? Gizli ve güvenli mi?

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.

Oluşturulan kod doğrudan Go projelerine yerleştirilebilir mi?

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.

Bu araç ücretsiz mi? Kayıt olmam gerekiyor mu?

Tamamen ücretsiz, kayıt veya giriş gerekmez. Sayfayı açın ve hemen kullanın, özellik sınırı, filigran veya zorunlu giriş yok.

Hangi boyuttaki JSON dosyaları destekleniyor?

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.

Sayısal türler tek tip float64 üretecek mi?

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.

Sorun Giderme

Sağda 'Lütfen JSON verisi girin' görünüyor

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.

JSON ayrıştırma hatası gösteriyor ancak hata konumu bulunamıyor

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.

Oluşturulan alan adları Go adlandırma kurallarına uymuyor

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 alanı interface{} oluşturuyor, belirli türe değiştirmek istiyorum

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.

Büyük JSON dönüşümünden sonra sayfa gecikiyor

Ç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 öğe türü []interface{} olarak çıkarıldı

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.

Sözlük

struct
Birden fazla alanı tek bir türde birleştirmek için kullanılan Go'nun bileşik veri türü. Bu araç tarafından oluşturulan Go kodunun gövdesi birkaç struct tanımından oluşur.
slice
Go'nun dinamik dizi türü, sözdizimi []T. Bu araç JSON dizilerini karşılık gelen dilimlere eşler, örn. []string, []int64, []UserItem.
json tag
Go struct alanından sonraki ters tırnak içindeki dize, örn. `json:"user_name"`, encoding/json serileştirme/deserileştirme sırasında alan adını belirtmek için kullanılır. Bu araç bu etiketi otomatik olarak oluşturur.
interface{}
Go'nun boş arayüz türü, herhangi bir değeri temsil edebilir. Bu araç JSON null veya belirsiz türle karşılaştığında güvenli yedek olarak interface{} kullanır.
PascalCase
Her kelimenin büyük harfle başladığı adlandırma stili, örn. UserName, AddressCity. Go, dışa aktarılan alanların büyük harfle başlamasını gerektirir, bu nedenle bu araç JSON alan adlarını otomatik olarak PascalCase'e dönüştürür.
encoding/json
Go standart kütüphanesindeki JSON kodlama/çözme paketi. Bu araç tarafından oluşturulan struct'lar json etiketleriyle eşleştirildikten sonra, json.Unmarshal ve json.Marshal doğrudan kullanılabilir.
unmarshal
JSON bayt akışını Go değerine ayrıştırma işlemi. Struct oluşturduktan sonra en yaygın kullanım json.Unmarshal(data, &user) çağırmaktır.
omitempty
Go json etiketinin yaygın seçeneği, örn. `json:"name,omitempty"`, alan sıfır değerindeyken çıktıyı atla anlamına gelir. Bu araç varsayılan olarak omitempty oluşturmaz; oluşturmadan sonra gerektiğinde manuel olarak ekleyin.

JSON Türünden Go Türüne Eşleme Hile Sayfası

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ğiOluşturulan Go TürüNot
"hello"stringDoğrudan dize eşlemesi
true / falseboolBoolean değer
42int64Ondalık noktası olmayan sayı
3.14float64Ondalık noktalı sayı
nullinterface{}Belirli tür çıkarılamadığında güvenli yedek
["a","b"][]stringDize dizisi
[1,2,3][]int64Tamsayı dizisi
[{...},{...}][]UserItemNesne dizisi, öğe türleri özyinelemeli olarak oluşturulur
{"id":1}UserNesne bağımsız struct oluşturur

Yaygın Go Sayısal Tür Seçimi Önerileri

Araç varsayılan olarak int64 ve float64 kullanır; gerçek projelerde ihtiyaca göre ayarlayın:

SenaryoÖnerilen TürNeden
Genel tamsayı kimlikleri, sayaçlarint64Araç varsayılanıyla tutarlı, çoğu JSON sayısıyla uyumlu
Veritabanı otomatik artan PK'sının pozitif olduğu biliniyoruint64Negatif sayılardan kaçınır, daha net anlambilim
32-bit sistemler veya açıkça küçük aralıklı tamsayılarint32Bellek kullanımını azaltır
Fiyatlar, koordinatlar, bilimsel hesaplamalarfloat64Araç varsayılanıyla tutarlı, standart kayan nokta hassasiyeti
Hassas para birimi hesaplamasıdecimal.Decimal / intfloat64 hassasiyet riski taşır; shopspring/decimal veya sent birimi olarak int önerilir

Privacy & Security

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.