JSON a tipi
Un campione da una parte, un tipo dall’altra.
Gli esempi sostituiscono temporaneamente i dati e le impostazioni. Puoi ripristinare il lavoro precedente.
Incolla o scrivi qui sopra per vedere il risultato.
I tuoi file restano sul tuo dispositivo
Questo strumento viene eseguito interamente nel tuo browser. Ciò che incolli viene elaborato sul tuo dispositivo e non viene mai inviato a un server, quindi puoi usarlo in sicurezza con token, chiavi e testi non pubblicati.
Esempio
Esempio: anagrafica clienti in JSON a struct Go, con partita IVA o codice fiscale
Un gestionale per la fatturazione elettronica scritto in Go legge i clienti esportati in JSON. Si incollano due clienti fittizi: Rossi Impianti S.r.l. di Milano, con partita IVA e codice SDI e PEC null, e Bianchi Mario, persona fisica di Torino, con codice fiscale e PEC. Impostazioni: Go, nome Cliente, rientro Tabulazione.
- L’array iniziale è descritto da un solo struct, Cliente, letto da entrambi gli elementi; indirizzo ha campi propri e diventa *Indirizzo.
- partita_iva e codice_sdi ci sono solo per la società, codice_fiscale solo per la persona: tutti e tre escono string con omitempty nel tag json, e CodiceFiscale va in fondo perché compare per ultimo.
- pec è null nel primo cliente e una stringa nel secondo: diventa *string, un puntatore che può essere nil, così una PEC assente non si confonde con una stringa vuota.
- cap resta string perché nel JSON è tra virgolette: un CAP come 00118 di Roma non perde lo zero iniziale.
| Campo | Nei due clienti | Go |
|---|---|---|
| ragione_sociale | in entrambi | string |
| partita_iva | solo Rossi Impianti | string, omitempty |
| codice_sdi | solo Rossi Impianti | string, omitempty |
| codice_fiscale | solo Bianchi Mario | string, omitempty |
| pec | null, poi un indirizzo PEC | *string |
| indirizzo | via, cap, citta, provincia | *Indirizzo |
| cap | "20100", "10121" | string |
2 struct, Cliente e Indirizzo, con i nomi dei campi in maiuscolo come vuole Go (RagioneSociale, PartitaIva, CodiceSdi). Le colonne di nomi, tipi e tag escono già allineate come le scrive gofmt. Da rifinire a mano: PartitaIVA e CodiceSDI sono la grafia più usata in Go per le sigle.
Come funziona
- Incolla una risposta vera. Un record reale vale più di uno inventato.
- Scegli TypeScript, Go o Zod.
- Dai un nome al tipo principale, o lascia Root.
- Copia il risultato e rileggilo: dedurre da un campione dà una prima bozza, non una specifica.
Domande frequenti
- Guarda tutti gli elementi dell’array o solo il primo?
- Tutti. [{a:1},{a:1,b:2}] rende b opzionale invece di far finta che non esista: proprio l’errore che rende fastidiosi i tipi generati due settimane dopo.
- Che cosa fa con null?
- Allarga anziché restringere. Un campo che è stato null una volta è un campo che può essere null: in TypeScript diventa un’unione, in Go un puntatore. È quasi sempre quel che l’API fa davvero.
- Posso fidarmi del risultato?
- Come punto di partenza. Un campione non può dirti che un campo è un enum, che un numero è intero o che una stringa è una data: rileggi e stringi. Risparmia la digitazione, non il ragionamento.
- E se il JSON comincia con un array?
- Il tipo descrive allora un solo elemento, con il nome che scrivi, e vengono letti tutti gli elementi: un campo che manca in alcuni diventa facoltativo. In TypeScript un’ultima riga aggiunge il tipo della lista, per esempio ClienteList = Cliente[]; in Go si usa []*Cliente.
- Perché i numeri escono come number, o float64 in Go, e mai come interi?
- Perché un campione non dimostra che un numero sia sempre intero: il 24 di oggi può diventare 24.5 domani. TypeScript e Zod scrivono number, Go scrive float64. Se un id o una quantità sono sempre interi, cambiali in int o int64 in Go, o aggiungi .int() in Zod.
- Viene inviato qualcosa a un server?
- No. Gira nel browser: quello che incolli resta sul tuo computer.