Sări la conținut
Complet local

JSON la schema Zod

Generează o schemă de validare Zod și tipuri TypeScript dintr-o mostră JSON, cu detectare de formate și enumerări.

Intrare
Ieșire

JSON la schema Zod

Lipește o mostră JSON — un răspuns API, un fișier de configurare, un rând din baza de date — și obține o schemă Zod gata de folosit în TypeScript. Tipurile sunt deduse per câmp: primitivele se mapează la z.string(), z.number() și z.boolean(), matricele au tipul de element dedus, și o valoare care diferă între apariții devine z.union(). Un string care arată ca o adresă de e-mail, URL, UUID sau dată ISO obține validatorul corespunzător — .email(), .url(), .uuid(), .date() sau .datetime() — în loc de un z.string() simplu.

Oferă-i o matrice de obiecte de aceeași formă, cum ar fi rânduri de la un endpoint de listă, și generatorul fuzionează fiecare element înainte de a tipiza câmpul: o cheie care lipsește în unele rânduri devine .optional(), o cheie care uneori este nulă devine .nullable() sau .optional() în funcție de opțiunea pe care o alegi, și un câmp care repetă un mic set de valori — o coloană de stare sau rol — devine un z.enum() adecvat în loc de un string deschis. Activează "Împarte obiectele imbricate" pentru a extrage fiecare obiect imbricat în propria exportare numită în loc de un literal profund imbricat, unde formele identice împart automat o schemă. Activează "Obiecte stricte" pentru a respinge orice cheie pe care mostra nu a arătat niciodată, capturând greșeli de tastare și câmpuri API neașteptate în timpul analizării în loc de mai târziu.

Numește schema exportată așa cum îți cere codul și, opțional, adaugă export type X = z.infer<typeof X> chiar dedesubt, pentru ca validatorul din runtime și tipul din timp de compilare să provină din aceeași sursă și să nu poată niciodată să diverja în tăcere.

Totul se execută local în browserul tău. JSON-ul pe care îl lipi — răspunsuri API care conțin jetoane, înregistrări de utilizatori, sarcini interne — este analizat și tipizat complet pe dispozitivul tău și nu este niciodată încărcat nicăieri. Lipește o mostră, copiază schema generată în proiectul tău și începe să validezi ceea ce analizezi.

FAQ

Cum decide între .optional() și .nullable()?
O cheie care lipsește în unele mostre din matrice este întotdeauna .optional() — nu există alt mod de a permite o cheie lipsă. O cheie care este prezentă dar uneori nulă este ambiguă, deci opțiunea "Tratarea null" decide: nullable o tipizează cu precizie cu .nullable(), optional tratează o valoare nulă la fel ca și o lipsă.
Cum sunt tratate obiectele imbricate?
Implicit, un obiect imbricat este tipizat inline, exact acolo unde apare. Activează "Împarte obiectele imbricate" pentru a da fiecărei forme imbricate propria export const ...Schema și formele identice împart automat o schemă în loc să o dubleze.
Când devine un câmp z.enum() în loc de z.string()?
Când "Detectează enumerări" este activat și un câmp repetă un mic set de valori string distincte — 2 la 5 — într-o matrice de mostre, cum ar fi o coloană de stare sau categorie. Un câmp cu doar valori unice sau prea multe distincte rămâne z.string().
Ce face opțiunea "Obiecte stricte"?
Adaugă .strict() la fiecare z.object() generat, deci analiza va eșua dacă intrarea conține o cheie pe care mostra nu a arătat niciodată — util pentru a capta erori de tastare sau adăugiri API neanuțate în loc să le ignori în tăcere.
JSON-ul meu este încărcat undeva?
Nu. Schema este generată complet în browserul tău — JSON-ul tău nu părăsește niciodată dispozitivul tău.