MiServe DevTools

I tuoi adesivi

Fissa qui gli strumenti. Restano salvati in questo browser.

Convertitore da JSON a struct Go e TypeScript

Trasforma un esempio di JSON in struct Go, interface o type TypeScript, oppure in un JSON Schema, riconoscendo chiavi opzionali, null e date.

Funziona nel tuo browser. Nulla di ciò che incolli viene caricato.

Informazioni su questo strumento

Cosa si ricava dall'esempio

Lo strumento percorre il valore JSON e registra cosa trova in ogni posizione. Gli elementi di un array vengono uniti in un'unica descrizione: una chiave che manca in alcuni degli oggetti diventa opzionale, un valore che a volte è null diventa nullable, e un array con valori di tipi diversi diventa una union in TypeScript e []any in Go.

Un numero è un intero solo se ogni sua occorrenza è scritta senza punto decimale né esponente e sta in un intero con segno a 64 bit; altrimenti è un numero in virgola mobile. Una stringa diventa una date-time solo se ogni occorrenza è una date-time RFC 3339 come 2026-11-14T10:00:00Z. Una data senza orario resta una stringa.

Ogni oggetto annidato riceve un tipo che prende il nome dalla sua chiave. Per gli elementi di un array il nome viene messo al singolare quando la chiave è un semplice plurale inglese, quindi users dà User e categories dà Category; altrimenti viene aggiunto Item. Con Tipi annidati inline gli oggetti annidati vengono scritti invece dentro il tipo che li contiene.

L'output Go

I nomi dei campi sono esportati e seguono la convenzione di Go per le sigle, quindi user_id diventa UserID e html_url diventa HTMLURL, mentre il tag json mantiene la chiave originale. Gli interi sono int, oppure int64 quando un'occorrenza non sta in 32 bit, perché la specifica di Go consente che int sia largo 32 bit. Gli altri numeri sono float64 e le date-time time.Time. La differenza tra 1 e 1.0 conta: encoding/json si rifiuta di decodificare 1.0 in un campo int.

Con Aggiungi omitempty ai campi opzionali attivo, una chiave che manca in alcune occorrenze riceve omitempty nel tag e mantiene il suo tipo semplice. Uno scalare o una struct che può essere null diventa un puntatore, come *string, così null e il valore zero restano distinti; una slice o una map non ha bisogno del puntatore, perché può essere nil. Un valore che è sempre e solo null diventa any. Anche le struct annidate opzionali e i campi time.Time opzionali diventano puntatori, perché omitempty non omette mai un valore struct. Le colonne sono allineate come le allinea gofmt.

Alcune chiavi non si possono associare a un campo della struct. Nessun tag json può indicare una chiave vuota o una chiave che contiene una virgola, delle virgolette o un backslash. L'encoding/json originale ignora anche un nome di tag che contiene caratteri diversi da lettere, cifre e punteggiatura comune, quindi una chiave con un segno diacritico combinante o un'emoji viene associata solo dall'implementazione basata su encoding/json/v2. Quando l'esempio contiene chiavi di questo tipo, lo strumento le elenca sotto l'output.

L'output TypeScript e JSON Schema

In TypeScript una chiave opzionale si scrive con ?:, un valore nullable con | null, e una chiave che non è un identificatore valido va tra virgolette. Le date-time hanno tipo string, perché è quello che restituisce JSON.parse, con un commento che le segnala. Le forme interface e type alias descrivono la stessa struttura; scegli quella che usa il tuo codice.

L'output JSON Schema segue la draft 2020-12. Le chiavi presenti in ogni occorrenza sono elencate sotto required, gli interi sono integer, le date-time hanno format: date-time, e i tipi oggetto con un nome sono messi sotto $defs e richiamati con $ref.

Un esempio mostra com'era fatto un documento, non tutto ciò che un'API può inviare. Prima di fidarti del risultato, controlla i campi opzionali e nullable nella documentazione dell'API.

Domande

Come fa lo strumento a sapere che un campo è opzionale?

Può capirlo solo dagli array. Quando gli oggetti di uno stesso array non hanno tutti le stesse chiavi, una chiave che manca in almeno uno di essi è opzionale. Un oggetto da solo non fornisce indizi, quindi tutte le sue chiavi sono considerate obbligatorie.

Perché un numero è int e un altro float64?

Un numero ha tipo intero quando ogni sua occorrenza è scritta senza punto decimale né esponente e sta in un intero a 64 bit. In Go diventa int, oppure int64 quando un'occorrenza è fuori dall'intervallo a 32 bit. Se anche una sola occorrenza è 2.5, o è scritta come 1.0, il campo diventa float64 in Go e number in JSON Schema. TypeScript usa number per tutti.

Cosa succede quando un valore è null?

Se lo stesso campo ha anche un'occorrenza non null, il tipo diventa nullable: in Go un puntatore, oppure una slice o una map, che possono già essere nil; in TypeScript una union con null; in JSON Schema uno schema che accetta anche null. Se null è l'unica occorrenza, del tipo reale non si sa nulla, quindi il risultato è any in Go e null in TypeScript e in JSON Schema.

Il mio JSON viene inviato a un server?

No. I tipi vengono generati da JavaScript nella scheda del tuo browser. Lo strumento non fa alcuna richiesta di rete con ciò che incolli, e la policy di sicurezza del sito blocca le richieste verso qualsiasi altro host.

Altri strumenti in Dati