Ga naar inhoud
100% lokaal

JSON naar Zod-schema

Genereer een Zod-validatieschema en TypeScript-typen uit een JSON-voorbeeld, met format- en enum-detectie.

Invoer
Uitvoer

JSON naar Zod-schema

Plak een JSON-voorbeeld — een API-respons, een configuratiebestand, een databaserij — en verkrijg een klaar-om-te-gebruiken Zod-schema in TypeScript. Typen worden voor elk veld afgeleid: primitieve typen worden toegewezen aan z.string(), z.number() en z.boolean(), arrayvelden krijgen het afgeleide elementtype, en een waarde die tussen voorvallen varieert, wordt een z.union(). Een string die op een e-mailadres, URL, UUID of ISO-datum lijkt, krijgt de overeenkomstige validator — .email(), .url(), .uuid(), .date() of .datetime() — in plaats van een eenvoudige z.string().

Geef het een array van gelijk gevormde objecten, zoals rijen van een lijsteindpunt, en de generator voegt elk element samen voordat het veld wordt getypeerd: een sleutel die in sommige rijen ontbreekt, wordt .optional(), een sleutel die soms null is, wordt .nullable() of .optional() afhankelijk van de gekozen instelling, en een veld dat een kleine reeks waarden herhaalt — een status- of rolaanduiding — wordt een correct z.enum() in plaats van een open string. Zet “Geneste objecten splitsen” aan om elk genest object in zijn eigen benoemde export te trekken in plaats van één diep genest letterlijke waarde. Zet “Strikte objecten” aan om elke sleutel af te wijzen die het voorbeeld nooit heeft weergegeven — handig voor het vangen van typefouten en onverwachte API-velden bij het parseren in plaats van later in het proces.

Noem het geëxporteerde schema zoals uw code het verwacht, en voeg optioneel export type X = z.infer<typeof X> er direct onder toe, zodat de runtime-validator en het compile-time-type uit dezelfde bron komen en zich nooit stilletjes kunnen uiteengroeien.

Alles draait lokaal in uw browser. Het JSON dat u plakt — API-antwoorden met tokens, gebruikersrecords, interne payloads — wordt volledig op uw apparaat geparst en getypeerd en wordt nooit ergens heen geüpload. Plak een voorbeeld, kopieer het gegenereerde schema naar uw project en begin te valideren wat u parseert.

FAQ

Hoe besluit het tussen .optional() en .nullable()?
Een sleutel die in sommige arrayvoorbeelden ontbreekt, is altijd .optional() — er is geen ander manier om een ontbrekende sleutel toe te staan. Een sleutel die aanwezig is, maar soms null is, is dubbelzinnig, dus de optie “Null-verwerking” beslist: nullable typen het nauwkeurig met .nullable(), optional behandelt een null-waarde hetzelfde als een ontbrekende.
Hoe worden geneste objecten afgehandeld?
Standaard wordt een genest object inline getypeerd, precies waar het verschijnt. Zet “Geneste objecten splitsen” aan om elke geneste vorm zijn eigen export const ...Schema te geven, en identieke vormen delen automatisch één schema in plaats van het te dupliceren.
Wanneer wordt een veld z.enum() in plaats van z.string()?
Wanneer “Enums detecteren” is ingeschakeld en een veld een kleine reeks verschillende tekenreekswaarden — 2 tot 5 — over een array voorbeelden herhaalt, zoals een status- of categorieaanduiding. Een veld met alleen unieke waarden of te veel verschillende blijft z.string().
Wat doet de optie “Strikte objecten”?
Het voegt .strict() toe aan elk gegenereerd z.object(), dus het parseren mislukt als de invoer een sleutel bevat die het voorbeeld nooit heeft weergegeven — handig voor het vangen van typefouten of onverwachte API-toevoegingen in plaats van ze stilzwijgend te negeren.
Wordt mijn JSON ergens geüpload?
Nee. Het schema wordt volledig in uw browser gegenereerd — uw JSON verlaat uw apparaat nooit.