Hoppa till innehåll
100% lokalt

JSON till Zod-schema

Generera ett Zod-valideringsschema och TypeScript-typer från ett JSON-exempel, med format- och enum-detektering.

Inmatning
Utmatning

JSON till Zod-schema

Klistra in ett JSON-exempel — ett API-svar, en konfigurationsfil, en databasrad — och få ett färdigt Zod-schema i TypeScript. Typer härledas för varje fält: primitiva typer mappas till z.string(), z.number() och z.boolean(), arrayfält får den härledda elementtypen, och ett värde som skiljer sig mellan förekomster blir en z.union(). En sträng som ser ut som en e-postadress, URL, UUID eller ISO-datum får den matchande validatorn — .email(), .url(), .uuid(), .date() eller .datetime() — istället för en enkel z.string().

Ge det en array av likformade objekt, som rader från en listslutpunkt, och generatorn slår samman varje element innan fältet typas: en nyckel som saknas i vissa rader blir .optional(), en nyckel som ibland är null blir .nullable() eller .optional() beroende på den valda inställningen, och ett fält som upprepar en liten uppsättning värden — en status- eller rollkolumn — blir ett korrekt z.enum() istället för en öppen sträng. Slå på ”Dela upp kapslade objekt” för att dra ut varje kapslat objekt till sitt eget namngivna export istället för en djupt kapslad literal. Slå på ”Strikta objekt” för att avvisa alla nycklar som exemplet aldrig visade — användbart för att fånga stavfel och oväntade API-fält vid parsning istället för senare i flödet.

Namnge det exporterade schemat så som din kod förväntar sig det, och lägg eventuellt till export type X = z.infer<typeof X> direkt under det, så att körningsvalidatorn och compile-tidtypen kommer från samma källa och aldrig kan glida iväg från varandra i det fördolda.

Allt körs lokalt i din webbläsare. Det JSON som du klistrar in — API-svar som innehåller tokens, användarrecord, interna nyttolaster — tolkas och typas helt på din enhet och laddas aldrig upp någonstans. Klistra in ett exempel, kopiera det genererade schemat till ditt projekt och börja validera vad du tolkar.

FAQ

Hur väljer det mellan .optional() och .nullable()?
En nyckel som saknas i vissa arrayexempel är alltid .optional() — det finns inget annat sätt att tillåta en saknad nyckel. En nyckel som är närvarande men ibland null är tvetydig, så inställningen "Null-hantering" avgör: nullable skriver det exakt med .nullable(), optional behandlar ett null-värde på samma sätt som ett saknat.
Hur hanteras kapslade objekt?
Som standard typas ett kapslat objekt inline, precis där det visas. Slå på "Dela upp kapslade objekt" för att ge varje kapslad form sitt eget export const ...Schema, och identiska former delar automatiskt ett schema istället för att duplicera det.
När blir ett fält z.enum() istället för z.string()?
När "Detektera enums" är på och ett fält upprepar en liten uppsättning distinkta strängvärden — 2 till 5 — över en array av exempel, som en status- eller kategorikolumn. Ett fält med endast unika värden eller för många distinkta förblir z.string().
Vad gör inställningen "Strikta objekt"?
Det lägger till .strict() till varje genererat z.object(), så parsningen misslyckas om inmatningen innehåller en nyckel som exemplet aldrig visade — användbart för att fånga stavfel eller omeddelada API-tillägg istället för att ignorera dem tyst.
Laddas mitt JSON upp någonstans?
Nej. Schemat genereras helt i din webbläsare — ditt JSON lämnar aldrig din enhet.