UTILS.
100% w przeglądarce
🛡️

JSON na schemat Zod

Wklej przykładową wartość JSON i wygeneruj schemat Zod oraz wywnioskowany typ TypeScript, aby jeden kształt walidował w czasie wykonania i typował w czasie kompilacji.

wynik

O tym narzędziu

Narzędzie JSON na schemat Zod zamienia wklejony przykład JSON w gotowy do użycia schemat Zod oraz odpowiadający mu typ TypeScript. Zod to dominująca biblioteka walidacji dla TypeScript, a ręczne pisanie drzew z.object dla rzeczywistych ładunków API jest wolne i podatne na błędy. Ten konwerter parsuje Twój JSON za pomocą JSON.parse, rekurencyjnie przechodzi przez wartość i emituje idiomatyczny Zod: łańcuchy stają się z.string(), liczby całkowite z.number().int(), inne liczby z.number(), wartości logiczne z.boolean(), null z.null(), a zagnieżdżone obiekty otrzymują własne nazwane schematy z.object({...}).

Wszystko działa lokalnie w Twojej przeglądarce — Twój JSON jest parsowany na stronie i nigdy nie jest przesyłany, więc wrażliwe ładunki pozostają na Twoim urządzeniu. Tablice wnioskują typ swoich elementów przez głębokie scalenie każdego elementu, więc tablica obiektów o nieco różniących się kluczach tworzy jeden schemat, w którym klucze brakujące w niektórych elementach są oznaczone jako .optional(). Łańcuchy daty i czasu w formacie ISO-8601 są rozpoznawane i emitowane jako z.string().datetime(). Klucze obiektów, które nie są prawidłowymi identyfikatorami, są bezpiecznie ujmowane w cudzysłów.

Wynik to kompletny moduł: eksportowany const dla każdego schematu obiektu (elementy podrzędne zdefiniowane przed rodzicami, którzy się do nich odwołują), a następnie export type Root = z.infer<typeof Root>, więc otrzymujesz typy kompilacji za darmo. Użyj pola nazwy głównej, aby zmienić nazwę schematu najwyższego poziomu, oraz przełącznika brakujących kluczy, aby traktować nieobecne klucze jako .optional() (domyślnie) lub .nullable(). Skopiuj wynik lub pobierz go jako plik .ts.

Najczęściej zadawane pytania

Jak typy JSON są mapowane na Zod?
string na z.string(), łańcuch daty i czasu ISO na z.string().datetime(), liczby całkowite na z.number().int(), inne liczby na z.number(), wartości logiczne na z.boolean(), null na z.null(), tablice na z.array(...), a obiekty na nazwany z.object({...}). Puste tablice stają się z.array(z.unknown()).
Jak obsługiwane są pola opcjonalne lub nullable?
Gdy elementom tablicy lub scalonym rodzeństwom brakuje klucza, ten klucz jest oznaczany jako .optional(). Wartość widziana jako null staje się z.null() lub dodaje .nullable(). Przełącznik brakujących kluczy pozwala emitować .optional() (domyślnie) lub .nullable() dla kluczy nieobecnych w niektórych przykładach.
Czy otrzymam też typ TypeScript?
Tak. Po schemacie emituje export type Root = z.infer<typeof Root>, więc wywnioskowany typ statyczny jest wyprowadzany z samego schematu — jedno źródło prawdy zarówno dla walidacji w czasie wykonania, jak i typów w czasie kompilacji.
Czy mój JSON jest gdzieś przesyłany?
Nie. Parsowanie i generowanie kodu odbywają się w całości w Twojej przeglądarce za pomocą JSON.parse i czystego JavaScriptu. Nic nie jest wysyłane na serwer, więc możesz bezpiecznie wkleić prywatne odpowiedzi API.

Więcej narzędzi