Conversione da JSON a struttura Go
Incollando un oggetto o un vettore JSON, genera automaticamente la corrispondente definizione di struttura Go con le relative etichette json.
Consigli per l'uso
- Se tutti gli elementi di un vettore sono oggetti, le loro chiavi vengono fuse in un'unica struttura; alle chiavi presenti soltanto in alcuni elementi si aggiunge automaticamente l'opzione `omitempty`.
- Il nome del tipo radice, inizialmente «Root», si può cambiare a piacere. I nomi delle strutture annidate sono generati automaticamente convertendo in maiuscole iniziali il nome della proprietà.
- Il valore null del JSON diventa `interface{}`, perché Go non dispone di tipi elementari annullabili. Se vi occorre un trattamento rigoroso, valutate la sostituzione con un tipo puntatore.
- Il risultato è prodotto con una formattazione semplice a rientri allineati; passandolo poi attraverso `gofmt` lo uniformerete allo stile del vostro progetto.
- Incollando senz'altro un JSON di esempio preso da una risposta reale, otterrete in un attimo una prima stesura della struttura Go per le risposte.
Domande frequenti
A proposito — la scelta progettuale delle strutture Go e delle etichette json
Go è un linguaggio a tipizzazione statica e, nel trattare il JSON, il pacchetto standard di codifica esamina la corrispondenza fra i campi della struttura e le etichette json per svolgere codifica e decodifica. Trascrivere a mano come struttura il formato delle risposte di un'interfaccia esterna è un lavoro ripetitivo che cresce con il numero dei campi e che innumerevoli progetti in Go hanno dovuto affrontare.
Questo strumento analizza la struttura di un JSON di esempio e genera automaticamente la definizione corrispondente con le etichette json, alleggerendo quel lavoro. Fra gli strumenti dello stesso genere è noto quicktype, che genera tipi per più linguaggi; quando però si vuole soltanto incollare la risposta che si ha sotto mano e ottenere in fretta una struttura Go, la semplicità di uno strumento monofunzione ha i suoi vantaggi.
Go non offre alcun costrutto per rendere facoltativo un campo di una struttura: per i campi che nel JSON possono mancare si usa perciò l'opzione `omitempty` nell'etichetta oppure un tipo puntatore, come `*string`, per distinguere il valore nullo dall'assenza di valore. La struttura generata è soltanto una deduzione meccanica a partire dalla forma dei dati: stabilire quali campi siano annullabili e progettare in vista dei futuri cambiamenti dell'interfaccia resta un lavoro da svolgere a mano, confrontandosi con la documentazione.