PK Systems PK Systems
Strumenti per sviluppatori

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.

Da JSON a TypeScript / Go / Rust

Output

L'output appare qui mentre digiti.

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 letterale null diventa un'union con null — sono due cose diverse, dedotte separatamente.
  • Numeri: gli interi restano interi in Go e Rust (int64, i64); i float diventano float64 / f64. TypeScript collassa entrambi a number perché il linguaggio non distingue.
  • Array vuoti: [] deduce a unknown[] / []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?
Unifica le forme degli elementi. Se un array contiene [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?
Sì — non c'è limite di profondità. Ogni oggetto annidato viene chiamato come la sua chiave genitore (con la prima lettera maiuscola, singolarizzato quando il genitore è plurale), e una tabella interna evita le collisioni di nome aggiungendo un suffisso numerico. Le strutture auto-referenziali come gli alberi non vengono auto-rilevate; potrebbe essere necessario unire a mano due tipi generati se i tuoi dati formano un ciclo.
Perché i miei nomi di campo Go sono in PascalCase anche se ho scelto preserva?
Go richiede che i campi esportati delle struct inizino con una lettera maiuscola — è una regola del linguaggio, non una scelta di stile. I nomi di campo in minuscolo sarebbero privati e invisibili a 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?
I generatori enterprise supportano decine di linguaggi target, input JSON Schema, union discriminate, enum nominati e raffinamento multi-pass — utile quando hai uno schema formale e un team grande. Questo strumento è un inferrer leggero e senza fronzoli con output TypeScript, Go e Rust e zero setup. Per flussi "dammi un tipo per questa risposta API" una tantum, è più veloce e l'output è più facile da scorrere e modificare a mano.
Il mio output compilerà?
Quasi sempre sì per TypeScript. Anche l'output Go e Rust è compilabile così com'è, ma potresti dover aggiungere gli import giusti (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?
No. Il parser è il 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.