logo
GeekFormat

JSON in Go

Incolla JSON a sinistra, e le definizioni di tipo struct Go pronte per l'uso diretto nei progetti Go vengono generate automaticamente a destra. Elaborazione locale pura nel browser, nessuna registrazione o caricamento richiesto.

Raccomandazioni correlate

Informazioni su JSON in Go: Trasformare JSON nello struct fortemente tipizzato di Go

JSON in Go è il processo di conversione automatica dei dati in formato JSON in definizioni di tipo struct del linguaggio Go. JSON è il formato di scambio dati più comune nelle API REST, file di configurazione, code di messaggi e log, mentre Go è un linguaggio fortemente tipizzato; durante lo sviluppo, la struttura dinamica di JSON deve spesso essere mappata a struct prima della deserializzazione con encoding/json. Scrivere struct manualmente, specialmente oggetti annidati, porta facilmente a campi mancanti o tipi errati; questo strumento mira ad automatizzare il lavoro ripetitivo.

Lo struct di Go è un tipo di dati composito, dichiarato con `type Name struct { ... }`. Ogni campo è composto da nome e tipo; i nomi dei campi devono iniziare con maiuscola per essere accessibili da altri pacchetti, i cosiddetti 'identificatori esportati'. Lo strumento converte automaticamente i nomi dei campi JSON in nomi di campo esportati PascalCase, ad esempio `user_name` si mappa a `UserName`, con la chiave originale preservata nel tag json.

La conversione principale di questo strumento viene eseguita dal Web Worker jsonFormat nel browser, chiamando il renderer Go di quicktype-core con le opzioni `just-types` e `no-comments`. L'intero flusso non dipende da servizi backend: il JSON di input viene analizzato localmente, i tipi inferiti, il codice Go generato, infine presentato nell'editor destro.

L'inferenza del tipo segue il mappaggio convenzionale JSON in Go: stringhe mappate a `string`, booleani a `bool`, interi a `int64`, float a `float64`, array a slice `[]T`, oggetti a struct indipendenti, `null` a `interface{}`. Gli oggetti annidati vengono elaborati ricorsivamente, mantenendo chiara la gerarchia.

Rispetto alla scrittura manuale, il codice generato dallo strumento è una 'prima bozza eseguibile'. Gli sviluppatori di solito devono solo perfezionare il nome del tipo radice, il nome del pacchetto, la precisione del tipo di campo (ad esempio int64 in int) e se usare tipi puntatore, prima di posizionarli in veri progetti Go. Combinato con la copia in un clic e il download model.go, il lavoro ripetitivo nelle fasi di integrazione e modellazione è significativamente ridotto.

Casi d'uso

  • Lo sviluppo backend Go converte il JSON di risposta API REST in struct, si collega direttamente ai parametri del gestore Gin/Echo/Fiber con json.Unmarshal
  • Durante l'integrazione frontend-backend, prende il JSON di risposta di esempio da Postman, genera rapidamente il modello Go per ridurre la digitazione manuale dei campi
  • Quando si integrano callback Webhook di terze parti, converte il JSON payload in struct Go per accesso e validazione convenienti a livello di campo
  • Converte i file di configurazione JSON da Viper/Consul/Nacos in tipi Go, sostituendo l'accesso debolmente tipizzato map[string]interface{}
  • I team di microservizi unificano la struttura richiesta/risposta per le interfacce gRPC/HTTP, converte il JSON di esempio in tipi Go condivisi
  • Gli ingegneri di test convertono il fixture JSON in struct Go, usano con testify per test basati su asserzioni
  • DevOps analizza le righe di log JSON raccolte da ELK/Fluentd, genera struct per analisi strutturata con programmi Go
  • Dopo che i crawler hanno estratto dati JSON, converte in struct Go, lavora con gorm/gen o ent per generare modelli di database
  • I dati di telemetria JSON riportati dai dispositivi IoT si convertono in struct Go, deserializzazione e filtraggio nei programmi gateway perimetrali
  • Converte i messaggi JSON consumati da Kafka/NATS/RabbitMQ in tipi Go, per l'implementazione di consumer basato su eventi
  • Gli sviluppatori SDK convertono il JSON di risposta di esempio del server in struct Go, scrivono nel pacchetto types della libreria client per riferimento degli utenti
  • Converte il JSON di esempio dalla documentazione Swagger/OpenAPI in struct Go come esempi di codice di documentazione dell'interfaccia
  • Studenti o istruttori convertono il JSON di esempio in struct durante i corsi Go, dimostrano il sistema di tipi di Go e l'uso dei tag json
  • Gli script di migrazione dati convertono le righe JSON esportate da MySQL/PostgreSQL in struct Go, per il mappaggio dei campi e la validazione dei tipi
  • Il JSON di configurazione CI/CD si converte in struct Go, conveniente per la lettura della configurazione fortemente tipizzata negli strumenti di pipeline scritti in Go
  • I progetti legacy refattorizzano il codice di lettura JSON dinamico basato su map in accesso fortemente tipizzato basato su struct

Come utilizzare

  1. Incolla il contenuto JSON nell'editor sinistro, o trascina e rilascia file .json/.txt, o fai clic su 'Esempio' per caricare dati integrati.
  2. Attendi circa 400ms, lo strumento convertirà automaticamente e visualizzerà il codice struct Go generato a destra.
  3. Se JSON ha errori, fai clic sul pulsante 'Ripara JSON' per correggere automaticamente gli errori di formato comuni quindi continua la generazione.
  4. Controlla l'output destro, fai clic su 'Copia' per incollare nel progetto Go, o fai clic su 'Scarica' per salvare come file model.go.

Funzionalità

  • Generazione struct Go locale nel browser: l'analisi JSON e la generazione del codice Go completate nel browser, i dati grezzi non vengono caricati sul server
  • Conversione automatica con debounce di 400ms: nessun clic manuale necessario dopo incollaggio o modifica, il codice Go copiabile viene emesso in tempo reale a destra
  • Inferenza del tipo intelligente: stringhe mappate a string, booleani a bool, interi a int64, float a float64, array a slice, oggetti a struct
  • Espansione automatica degli oggetti annidati: genera ricorsivamente tipi struct indipendenti, mantenendo chiara la gerarchia JSON
  • Tag json generati automaticamente: i campi sono forniti con tag `json:"nome_originale"`, pronti per l'uso con encoding/json
  • Riparazione errori JSON in un clic: gestisce automaticamente virgole finali, virgolette singole, virgolette mancanti e altri errori di formato comuni, continua la generazione dopo la riparazione
  • Supporta input incolla/carica/esempio: trascina e rilascia file .json/.txt, o carica esempi integrati
  • Copia e download in un clic: copia tutto il codice Go negli appunti, o scaricalo come file model.go direttamente nel progetto
  • Cronologia input localStorage: salva automaticamente gli input recenti, recupero rapido dopo aggiornamento o chiusura accidentale della pagina
  • Editor a schermo diviso reattivo: larghezza pannello sinistro/destro regolabile, visualizzazione input/output confortevole su desktop e mobile

Esempi di codice

Deserializzare JSON con struct generato

go

Dopo aver copiato lo struct generato nel progetto, deserializza direttamente la risposta API con encoding/json.

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

Gestire JSON con campi potenzialmente mancanti

go

Se alcuni campi API potrebbero non esistere, cambia i campi corrispondenti in tipi puntatore o usa con il tag omitempty.

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

Domande frequenti

Come convertire JSON in struct Go?

Incolla il contenuto JSON nella casella di input sinistra, e lo strumento convertirà automaticamente in 400ms e visualizzerà lo struct Go generato a destra. Puoi anche trascinare e rilasciare file .json/.txt, o fare clic su 'Esempio' per caricare dati integrati. Dopo la conversione, copia o scarica il file model.go in un clic.

Il codice Go generato include tag json?

Sì. Lo strumento genera codice Go basato su quicktype-core, e per impostazione predefinita ogni campo struct viene fornito con tag `json:"nome_originale"`, conveniente per la serializzazione e deserializzazione dirette con Unmarshal/Marshal di encoding/json.

Gli array JSON verranno convertiti in slice Go?

Sì. Gli array JSON generano tipi di slice corrispondenti basati sui tipi di elementi, ad esempio `["a","b"]` genera `[]string`, `[1,2,3]` genera `[]int64`, `[{...},{...}]` genera tipi personalizzati come `[]UserItem`.

Gli oggetti annidati genereranno più struct?

Sì. Ogni oggetto annidato genera ricorsivamente un tipo struct indipendente, denominato in PascalCase. Ad esempio, l'oggetto `address` genera uno struct `Address`, referenziato nello struct principale tramite il campo `Address Address`.

Quale tipo generano i valori null?

I valori null in JSON sono generalmente inferiti come `interface{}`, che è il tipo di fallback sicuro. Se conosci il tipo effettivo del campo, puoi aggiungere un valore di esempio in JSON, rigenerare, quindi regolare manualmente al tipo specifico.

Posso personalizzare il nome dello struct radice?

Sì. Lo strumento utilizza il nome del tipo radice (come User) per impostazione predefinita; dopo aver modificato il nome del tipo radice nelle impostazioni, tutti i nomi dei sottotipi associati si aggiornano sincronicamente, anche il nome del file scaricato cambia di conseguenza.

Cosa fare se JSON ha errori di formato?

Lo strumento rileva automaticamente la validità JSON. Se esistono errori comuni come virgole finali, virgolette singole, virgolette mancanti, appare un pulsante 'Ripara JSON'. Facendo clic, lo strumento tenterà la riparazione automatica e rigenererà lo struct Go; quando la riparazione fallisce, viene fornita la posizione specifica dell'errore.

I dati verranno caricati sul server? È privato e sicuro?

No. Tutta l'analisi JSON, l'inferenza del tipo e la generazione del codice Go completate nel tuo browser tramite Web Worker; il contenuto inserito e il codice generato non vengono mai caricati su alcun server, né registrati nel cloud. JSON sensibile contenente chiavi API, token o dati aziendali può essere utilizzato in sicurezza.

Il codice generato può essere posizionato direttamente nei progetti Go?

Sì. Il codice generato è struct Go standard con tag json, può essere copiato direttamente nella directory types/ o models/ del progetto. Consigliamo di perfezionare i nomi dei tipi e i nomi dei pacchetti secondo le convenzioni di denominazione del progetto.

Questo strumento è gratuito? Devo registrarmi?

Completamente gratuito, nessuna registrazione o accesso richiesto. Apri la pagina e usala immediatamente, nessun limite di funzionalità, filigrane o accesso obbligatorio.

Che dimensione di file JSON è supportata?

Lo strumento non ha un limite stretto di dimensione del file, ma la velocità di conversione e le prestazioni di rendering dipendono dalle prestazioni del browser e del dispositivo. Consigliamo di elaborare JSON entro 1MB per la migliore esperienza; per JSON sovradimensionato, elabora prima con il formattatore JSON o lo strumento di divisione.

I tipi numerici genereranno uniformemente float64?

No. Lo strumento distingue interi e float: i campi interi generano int64, i campi float generano float64. Se preferisci tipi più specifici come int, uint64, sostituisci manualmente dopo la generazione.

Risoluzione dei problemi

Il lato destro mostra 'Inserisci dati JSON'

La casella di input sinistra è vuota o contiene solo spazi bianchi. Incolla JSON valido, o fai clic su 'Esempio' per caricare dati, o trascina e rilascia file .json/.txt.

Mostra errore di analisi JSON ma non trova la posizione dell'errore

Fai clic sul pulsante 'Ripara JSON' sotto la casella di input; lo strumento tenterà automaticamente di riparare virgole finali, virgolette singole, virgolette mancanti, oggetti in stile JS e altri problemi. Il risultato modificato verrà evidenziato dopo la riparazione.

I nomi dei campi generati non sono conformi alle convenzioni di denominazione Go

Lo strumento genera nomi di campo PascalCase dalle chiavi JSON. Se le chiavi contengono cinese o caratteri speciali, potrebbero essere generati nomi di campo con escape. Consigliamo di cambiare le chiavi JSON in inglese minuscolo o snake_case, quindi regolare uniformemente dopo la generazione.

Il campo null genera interface{}, voglio cambiare in tipo specifico

Poiché null non può inferire un tipo specifico, lo strumento usa interface{} come fallback. Puoi dare a questo campo un valore di esempio (come "" o 0) nel JSON sorgente, rigenerare quindi cambiare il tipo al tipo effettivo come string/int64.

La pagina rallenta dopo la conversione di JSON grande

Il rendering nel browser di JSON sovradimensionato e grandi quantità di struct consuma molta memoria. Raccomandazioni: ① Mantenere solo i campi chiave nel JSON di esempio; ② Dividere in più oggetti e convertire separatamente; ③ Chiudere altre schede del browser che consumano molta memoria.

Tipo elemento array inferito come []interface{}

Quando l'array è vuoto [] o i tipi di elementi sono incoerenti, lo strumento usa interface{} come fallback. Puoi aggiungere elementi di esempio dello stesso tipo, o cambiare manualmente il tipo in tipi di slice specifici come []string, []int64 dopo la generazione.

Glossario

struct
Tipo di dati composito di Go usato per combinare più campi in un tipo. Il corpo del codice Go generato da questo strumento è composto da diverse definizioni di struct.
slice
Tipo di array dinamico di Go, sintassi []T. Questo strumento mappa gli array JSON a slice corrispondenti, ad esempio []string, []int64, []UserItem.
json tag
Stringa tra backtick dopo il campo struct Go, ad esempio `json:"user_name"`, usata per specificare il nome del campo durante la serializzazione/deserializzazione di encoding/json. Questo strumento genera automaticamente questo tag.
interface{}
Tipo di interfaccia vuota di Go, può rappresentare qualsiasi valore. Questo strumento usa interface{} come fallback sicuro quando incontra JSON null o tipo indeterminato.
PascalCase
Stile di denominazione dove ogni parola inizia con maiuscola, ad esempio UserName, AddressCity. Go richiede che i campi esportati inizino con maiuscola, quindi questo strumento converte automaticamente i nomi dei campi JSON in PascalCase.
encoding/json
Pacchetto di codifica/decodifica JSON nella libreria standard di Go. Dopo che gli struct generati da questo strumento sono associati a tag json, json.Unmarshal e json.Marshal possono essere usati direttamente.
unmarshal
Processo di analisi di un flusso di byte JSON in un valore Go. Dopo aver generato lo struct, l'uso più comune è chiamare json.Unmarshal(data, &user).
omitempty
Opzione comune per il tag json di Go, ad esempio `json:"name,omitempty"`, significa omettere l'output quando il campo è un valore zero. Questo strumento non genera omitempty per impostazione predefinita; aggiungere manualmente secondo necessità dopo la generazione.

Tabella di riferimento rapido mappatura tipi JSON in tipi Go

Questo strumento inferisce automaticamente i tipi Go corrispondenti basati sul tipo di valore JSON; i mappaggi comuni sono i seguenti:

Esempio valore JSONTipo Go generatoNota
"hello"stringMappatura diretta stringa
true / falseboolValore booleano
42int64Numero senza punto decimale
3.14float64Numero con punto decimale
nullinterface{}Fallback sicuro quando il tipo specifico non può essere inferito
["a","b"][]stringArray di stringhe
[1,2,3][]int64Array di interi
[{...},{...}][]UserItemArray di oggetti, tipi di elementi generati ricorsivamente
{"id":1}UserL'oggetto genera struct indipendente

Raccomandazioni selezione tipi numerici comuni in Go

Lo strumento usa int64 e float64 per impostazione predefinita; regolare secondo necessità nei progetti reali:

ScenarioTipo consigliatoMotivo
ID interi generali, conteggiint64Coerente con l'impostazione predefinita dello strumento, compatibile con la maggior parte dei numeri JSON
PK auto-incrementale database nota come positivauint64Evita numeri negativi, semantica più chiara
Sistemi a 32 bit o interi di piccolo intervallo esplicitiint32Riduce l'impronta di memoria
Prezzi, coordinate, calcolo scientificofloat64Coerente con l'impostazione predefinita dello strumento, precisione a virgola mobile standard
Calcolo monetario precisodecimal.Decimal / intfloat64 ha rischio di precisione; consiglia shopspring/decimal o int in unità di centesimi

Privacy & Security

Tutta l'elaborazione di questo strumento JSON in Go viene completata interamente localmente nel tuo browser: l'analisi JSON, l'inferenza del tipo, la generazione del codice Go vengono eseguite tutte lato client tramite Web Worker; il contenuto JSON inserito, i file caricati e il codice Go generato non vengono mai caricati su alcun server, né registrati, memorizzati nella cache o archiviati nel cloud. Dopo aver chiuso o aggiornato la pagina, tutto il contenuto di input e output viene automaticamente cancellato dalla memoria, solo localStorage conserva la cronologia di input recente (può essere cancellata in qualsiasi momento). Adatto per elaborare JSON contenente chiavi API, token, dati aziendali sensibili.