Generazione di JSON di esempio da una struttura Go

Strumento che converte automaticamente le strutture Go e le loro etichette json in dati JSON di esempio. Gestisce strutture annidate, sezioni, l'opzione omitempty e l'etichetta json:"-", ed è utile per preparare simulacri di interfacce, esempi in Postman e carichi di prova per lo sviluppo dell'interfaccia utente.

Produrre un JSON d'esempio da una struttura Go

Quando allestite un simulacro di API o depositate un esempio di risposta in Postman, finite per scrivere a mano quale JSON una definizione di struttura produrrà davvero. Questo strumento genera quella forma come JSON d'esempio dalla sola definizione di struttura Go che incollate, tenendo conto tanto delle strutture annidate quanto delle slice, di omitempty e di json:"-".

Ciò che qui conta è che il nome di un campo Go non diventa necessariamente la chiave del JSON. L'etichetta json prevale dove è presente, e un campo contrassegnato json:"-" non compare affatto. Poiché omitempty scarta un campo quando il suo valore è il valore zero, perfino l'insieme delle chiavi può differire fra due codifiche della stessa struttura. Leggere la definizione a occhio invita dunque a sbagliarsi sulla forma reale del JSON, e dispiegarla meccanicamente è per l'appunto il compito di questo strumento. I valori prodotti sono solo rappresentativi di ciascun tipo: sostituiteli con dati sensati prima di servirvi dell'uscita.

Come si usa

  1. Incollate le definizioni di struttura Più strutture collegate fra loro si possono incollare insieme senza difficoltà.
  2. Indicate la struttura che vi interessa Specificatela quando ve n'è più d'una. Se lasciate il campo vuoto, viene usata la prima.
  3. Rivedete il JSON generato Le strutture annidate e le slice escono interamente dispiegate.
  4. Mettete i vostri valori Vi si trovano valori rappresentativi: sostituiteli con dati adatti al vostro scopo.

Consigli per sfruttarlo al meglio

  • Incollando più strutture insieme, i tipi dei campi annidati sono risolti automaticamente e l'oggetto di esempio è generato in modo ricorsivo; se una definizione manca, il campo è sostituito con un oggetto vuoto {} e compare un avviso.
  • Indicando il nome della struttura potete scegliere quale usare come radice anche quando il testo ne contiene diverse; lasciando vuoto il campo si adotta la prima che compare.
  • I campi con l'etichetta json:"-" sono esclusi dal risultato. Quelli con omitempty conservano invece la chiave, che potete eliminare a mano se non vi serve.
  • I valori generati sono soltanto segnaposto scelti in base al tipo: "example" per le stringhe, 1 per i numeri. Se li usate come esempio reale di risposta, sostituiteli con dati veri.
  • Questo strumento è l'inverso di quello affine che converte il JSON in strutture Go: dalle strutture definite nei gestori Go potete ricavare rapidamente carichi di esempio per chi sviluppa l'interfaccia utente o per la squadra di collaudo.

Quando torna utile

Nell'allestire un simulacro di API

Fissare l'esempio di risposta prima di scrivere il server evita che il lavoro sull'interfaccia debba attendere.

Nell'inserire esempi nella documentazione

Fornisce il materiale da incollare in un esempio di Postman o in un campione di OpenAPI.

Nel verificare l'effetto di un'etichetta

Vedete in forma concreta che cosa producano davvero omitempty o json:"-".

Nel concordare una forma con l'interfaccia

Mostrare un JSON concreto lascia meno spazio al fraintendimento che consegnare una definizione di tipi.

Termini della codifica in Go

Etichetta json
L'annotazione apposta a un campo nella forma json:"user_id", che dà il nome alla chiave dal lato JSON. In sua assenza si usa il nome del campo così com'è.
Omitempty
Un'impostazione che toglie del tutto la chiave dall'uscita quando il valore è il valore zero. Si noti che anche uno 0 o una stringa vuota cadono insieme al resto.
Json:"-"
Un'impostazione che tiene il campo fuori dal JSON. Serve a nascondere i campi di uso interno.
Valore zero
Il valore iniziale fissato per ciascun tipo: 0 per i numeri, vuoto per le stringhe, nil per puntatori e slice.
Slice
Una sequenza di lunghezza variabile, che in JSON diventa un array. Una slice nil viene scritta come null, il che la distingue da un array vuoto.
Campo incorporato
La notazione che accoglie un'altra struttura scrivendone il solo nome di tipo. In JSON i suoi campi compaiono allo stesso livello delle chiavi del genitore.

Domande frequenti

Trasformare a mano in JSON le strutture Go destinate alle risposte di un'interfaccia espone facilmente a errori nell'interpretazione dei tipi e delle etichette json, e con le strutture annidate diventa particolarmente laborioso. Generandolo automaticamente si condividono rapidamente carichi di esempio esatti con chi sviluppa l'interfaccia utente e con la squadra di collaudo.

Se nel testo inserito non si trova la definizione corrispondente, il valore di quel campo è prodotto come oggetto vuoto {} e compare un avviso. Incollando anche la definizione d'origine si ottiene l'esempio correttamente annidato.

L'opzione omitempty serve soltanto a omettere i valori nulli dal lato Go, perciò la chiave compare ugualmente nel JSON di esempio. I campi con l'etichetta json:"-" sono invece esclusi del tutto in fase di codifica e non compaiono nemmeno nell'esempio.

No, sono soltanto segnaposto che soddisfano il tipo. Alle stringhe si assegna "example", agli interi 1, ai numeri in virgola mobile 1.5 e ai valori logici true: sostituiteli quando vi servono come dati reali.

No: lo strumento si serve di un analizzatore semplificato basato su espressioni regolari e su una lettura riga per riga, non dell'albero sintattico del linguaggio. Non gestisce notazioni complesse come le definizioni di tipo distribuite su più righe o le strutture anonime annidate, e va quindi usato come semplice strumento di prima stesura.
Tool-kun

A proposito — l'idea di invertire la conversione da JSON a struttura Go

Realizzando un'interfaccia web in Go, la struttura della risposta si definisce di norma combinando le strutture con le etichette json. Ma quando chi sviluppa l'interfaccia utente o chi si occupa del collaudo vuole verificare il comportamento dell'interfaccia, leggere il codice Go e tradurre mentalmente in JSON il tipo di ogni campo è un lavoro faticoso e facilmente foriero di fraintendimenti.

Questo strumento compie esattamente la conversione inversa di quello affine che trasforma il JSON in strutture Go: basta incollare la definizione della struttura per ottenere un JSON di esempio con i nomi delle chiavi presi dalle etichette json e valori segnaposto scelti in base al tipo, pronto per gli esempi di Postman o per i dati simulati dell'interfaccia utente.

Non si tratta però di un vero compilatore Go, bensì di un analizzatore semplificato basato su espressioni regolari e su una lettura riga per riga. Gestisce le definizioni di campo semplici e risolve le strutture annidate incollate insieme, ma può non interpretare correttamente notazioni complesse come le strutture anonime annidate o le definizioni di tipo distribuite su più righe. Usatelo come punto di partenza e verificate le specifiche definitive sul codice sorgente.