Da JSON a TypeScript / Go / Rust
Incolla qualsiasi campione JSON. Ottieni interfacce TypeScript pulite, struct Go o tipi Rust con tag serde — veloce, leggero e pronto da incollare nel tuo codice.
Cosa fa questo convertitore
Percorre un campione JSON, deduce un tipo per ogni valore ed emette una definizione di tipo idiomatica nel linguaggio scelto. Gli oggetti diventano interface (TypeScript), struct (Go, Rust), e gli oggetti annidati producono definizioni di tipo fratelle. Gli array di oggetti unificano le forme degli elementi — i campi presenti in alcuni elementi ma non in altri vengono marcati come opzionali, e i valori primitivi che variano (stringa in alcuni elementi, intero in altri) collassano in un'union o in serde_json::Value in Rust. Nessun dato viene inviato da nessuna parte — l'intero inferrer gira nel tuo browser.
Come usarlo
Incolla un payload JSON rappresentativo (idealmente un record di una tua risposta API), scegli il linguaggio target e copia il risultato. Se il tuo JSON ha più istanze della stessa forma (per esempio una lista paginata), includi l'array — l'inferrer impara di più dalla varianza. Il selettore di caso rinomina i campi nell'output senza toccare le chiavi JSON; per Go e Rust la chiave originale viene preservata come tag della struct così la serializzazione fa il round-trip.
Consigli e trabocchetti
- Opzionale vs nullable: un campo mancante in alcuni record diventa
?/Option<T>, ma un campo presente ovunque con un valore letteralenulldiventa un'union connull— sono due cose diverse, dedotte separatamente. - Numeri: gli interi restano interi in Go e Rust (
int64,i64); i float diventanofloat64/f64. TypeScript collassa entrambi anumberperché il linguaggio non distingue. - Array vuoti:
[]deduce aunknown[]/[]interface{}/Vec<serde_json::Value>— inserisci un elemento di esempio per ottenere un tipo reale. - Rinominazione dei campi: solo l'inferrer rinomina i campi. Il tuo parser JSON deve comunque mappare le chiavi — Go usa il tag
json:, Rust usa#[serde(rename = ...)].
Domande frequenti
Come gestisce gli array di tipi misti?
[1, 2, "x"], il tipo dell'elemento diventa number | string. Se contiene [{a: 1}, {a: 1, b: 2}], l'elemento diventa un singolo tipo oggetto con a obbligatorio e b opzionale. In Go e Rust dove le union non hanno un equivalente pulito, le primitive miste collassano a interface{} / serde_json::Value.Gestisce strutture profondamente annidate?
Perché i miei nomi di campo Go sono in PascalCase anche se ho scelto preserva?
encoding/json. La chiave JSON originale viene preservata nel tag json:, quindi la serializzazione produce comunque il caso di input.In cosa si differenzia dai generatori di codice più pesanti?
Il mio output compilerà?
use serde::{Deserialize, Serialize}; per Rust è incluso; encoding/json di Go è implicito). Se le tue chiavi JSON entrano in conflitto con parole riservate dopo la rinominazione, Rust usa automaticamente gli identificatori grezzi r#.Qualcosa viene inviato a un server?
JSON.parse del browser e l'inferrer è una piccola funzione ricorsiva di questa pagina. Apri DevTools > Network e non vedrai partire alcuna richiesta mentre digiti. Sicuro per payload di produzione, risposte API interne e qualsiasi cosa tu non incollerebbe in un SaaS cloud.