Vai al contenuto
100% locale

JSON a schema Zod

Genera uno schema di validazione Zod e tipi TypeScript da un esempio JSON, con rilevamento di formati ed enumerazioni.

Ingresso

JSON a schema Zod

Incolla un esempio JSON — una risposta API, un file di configurazione, una riga di database — e ottieni uno schema Zod pronto all'uso in TypeScript. I tipi vengono inferiti per campo: i primitivi vengono mappati a z.string(), z.number() e z.boolean(), gli array hanno il tipo di elemento inferito e un valore che differisce tra le occorrenze diventa un z.union(). Una stringa che sembra un indirizzo email, un URL, un UUID o una data ISO ottiene il validatore corrispondente — .email(), .url(), .uuid(), .date() o .datetime() — invece di un semplice z.string().

Forniscigli un array di oggetti della stessa forma, come righe da un endpoint elenco, e il generatore unisce ogni elemento prima di tipizzare il campo: una chiave mancante in alcune righe diventa .optional(), una chiave che a volte è nulla diventa .nullable() o .optional() a seconda dell'opzione che scegli, e un campo che ripete un piccolo insieme di valori — una colonna di stato o ruolo — diventa un z.enum() appropriato invece di una stringa aperta. Attiva "Dividi oggetti annidati" per estrarre ogni oggetto annidato nella sua stessa esportazione denominata anziché un letterale profondamente annidato, dove le forme identiche condividono automaticamente uno schema. Attiva "Oggetti rigorosi" per rifiutare qualsiasi chiave che l'esempio non ha mai mostrato, rilevando errori di battitura e campi API inaspettati durante l'analisi anziché successivamente.

Nomina lo schema esportato come il tuo codice si aspetta e, facoltativamente, aggiungi export type X = z.infer<typeof X> proprio sotto, in modo che il validatore in esecuzione e il tipo in fase di compilazione provengano dalla stessa fonte e non possano mai divergere silenziosamente.

Tutto viene eseguito localmente nel tuo browser. L'JSON che incolli — risposte API contenenti token, record utente, carichi interni — viene analizzato e tipizzato completamente sul tuo dispositivo e non viene mai caricato da nessuna parte. Incolla un esempio, copia lo schema generato nel tuo progetto e inizia a convalidare quello che analizzi.

FAQ

Come sceglie tra .optional() e .nullable()?
Una chiave mancante in alcuni esempi di array è sempre .optional() — non c'è altro modo per consentire una chiave mancante. Una chiave presente ma a volte nulla è ambigua, quindi l'opzione "Gestione null" decide: nullable la digita accuratamente con .nullable(), optional tratta un valore null come se mancasse.
Come vengono gestiti gli oggetti annidati?
Per impostazione predefinita, un oggetto annidato viene tipizzato inline, esattamente dove appare. Attiva "Dividi oggetti annidati" per dare a ogni forma annidata il suo export const ...Schema proprio e le forme identiche condividono automaticamente uno schema anziché duplicarlo.
Quando un campo diventa z.enum() invece di z.string()?
Quando "Rileva enumerazioni" è attivo e un campo ripete un piccolo insieme di valori stringa distinti — da 2 a 5 — in un array di esempi, come una colonna di stato o categoria. Un campo con solo valori univoci o troppi distinti rimane z.string().
Cosa fa l'opzione "Oggetti rigorosi"?
Aggiunge .strict() a ogni z.object() generato, quindi l'analisi non riuscirà se l'input contiene una chiave che l'esempio non ha mai mostrato — utile per rilevare errori di battitura o aggiunte API non annunciate anziché ignorarli silenziosamente.
Il mio JSON viene caricato da qualche parte?
No. Lo schema viene generato interamente nel tuo browser — il tuo JSON non lascia mai il tuo dispositivo.