JSON in Struttura Go

Avanti

Incolla un campione JSON e ottieni definizioni di strutture Go che lo analizzano in modo pulito con encoding/json. I campi sono esportati (CamelCase), contrassegnati con le chiavi JSON originali, promossi a puntatori quando un valore potrebbe essere nullo, e gli oggetti annidati ottengono le proprie dichiarazioni di struttura nominate.

Come convertire JSON in struttura Go

  1. 1

    Incolla il JSON

    Un singolo campione è sufficiente. Campioni multipli migliorano l'inferenza dei valori nullabili.

  2. 2

    Scegli il nome

    PascalCase per i campi esportati è la convenzione Go. Scegli lo stile di abbreviazione (`URL` vs `Url`, `ID` vs `Id`).

  3. 3

    Scegli la strategia opzionale

    Usa puntatori per campi nullabili (la maggior parte idiomatica), o tag `omitempty`.

  4. 4

    Copia le strutture

    Una struttura radice più quelle annidate. Incolla in un file `.go` e premi `go build`.

Esempio di output

Per:

{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }

Output:

type User struct {
    FirstName string   `json:"first_name"`
    Age       int      `json:"age"`
    Email     *string  `json:"email"`
    Tags      []string `json:"tags"`
}

Mappatura dei tipi

Valore JSON Tipo Go
stringa string
intero int o int64
numero (decimale) float64
booleano bool
null (con un fratello non nullo) *T (puntatore)
array []T
oggetto Struttura nominata
array misto []interface{}

Idiomi di denominazione seguiti dal generatore

  • Iniziali maiuscole: id -> ID, url -> URL, api_key -> APIKey. Questo corrisponde allo stile raccomandato da Go (e alle regole di go vet / staticcheck).
  • JSON snake_case -> campi PascalCase: first_name -> FirstName.
  • Acronimi di una sola parola preservati: IP rimane IP, HTTP rimane HTTP.
  • Tag JSON: json:"first_name" mantiene la chiave originale in modo che le codifiche siano pulite.

Campi opzionali: puntatore o omitempty?

Strategia Usa quando
Puntatore (*T) Devi distinguere “assente” da “valore zero”
omitempty Vuoi solo saltare i valori zero durante la codifica; la decodifica memorizza zero per i mancanti
Nessuno Il campo è sempre presente e i valori zero sono significativi

Il generatore predefinisce puntatore + omitempty per tutto ciò che è visto come nullo; regola in base alla tua semantica.

Errori comuni

  • Usare int dove l’intero JSON supera MaxInt32 su un target a 32 bit. Usa int64 per valori noti grandi.
  • Codifica di ritorno e perdita dell’ordine delle chiavi. encoding/json emette chiavi nell’ordine di dichiarazione dei campi, non nell’ordine JSON originale. Ordina manualmente se hai bisogno di un output canonico.
  • Array di forme miste. []interface{} perde la sicurezza dei tipi. Considera i tipi unione con un campo discriminatore type invece.
  • Dimenticare omitempty sugli opzionali. Senza di esso, i campi opzionali si serializzano come "foo": null invece di essere omessi.

Domande frequenti

Usa puntatori quando devi distinguere “campo assente” da “campo è zero”. Usa omitempty quando il valore zero non è un valore commerciale legale ("", 0, false significano sempre “salta questo”). Molti team scelgono uno e lo applicano in modo coerente in un codice.

Ogni oggetto annidato diventa una dichiarazione di struttura nominata separata (ad es. User -> Address). I tipi sono in linea solo quando la struttura annidata è piccola e usata una sola volta; altrimenti ottieni tipi puliti e riutilizzabili.

Sì. id diventa ID, url diventa URL, api_key diventa APIKey. Questo è ciò che go vet si aspetta e ciò che la maggior parte delle guide di stile Go raccomanda.

Il generatore emette strutture semplici con tag standard json:. Per implementazioni personalizzate di UnmarshalJSON (ad es. per date in formati non ISO), aggiungile manualmente dopo la generazione.

Strumenti correlati

Strumento disponibile in altre lingue