UTILS.
100% у браузері
🛡️

JSON у схему Zod

Вставте зразок JSON і згенеруйте схему Zod та виведений тип TypeScript, щоб одна форма валідувала дані під час виконання, а типи — під час компіляції.

результат

Про цей інструмент

Інструмент JSON у схему Zod перетворює вставлений зразок JSON на готову до використання схему Zod і відповідний тип TypeScript. Zod — це домінантна бібліотека валідації для TypeScript, а вручну писати дерева z.object для реальних API-навантажень повільно й легко припуститися помилок. Цей конвертер розбирає ваш JSON за допомогою JSON.parse, рекурсивно обходить значення та видає ідіоматичний Zod: рядки стають z.string(), цілі числа — z.number().int(), інші числа — z.number(), булеві значення — z.boolean(), null — z.null(), а вкладені об'єкти — власними іменованими схемами z.object({...}).

Усе працює локально у вашому браузері — ваш JSON розбирається на сторінці й ніколи не завантажується на сервер, тож конфіденційні дані залишаються на вашому пристрої. Масиви визначають тип свого елемента шляхом глибокого злиття кожного елемента, тому масив об'єктів із трохи різними ключами дає одну схему, де відсутні в деяких елементах ключі позначаються .optional(). Рядки дати-часу у форматі ISO-8601 розпізнаються та видаються як z.string().datetime(). Ключі об'єктів, що не є коректними ідентифікаторами, безпечно беруться в лапки.

Результат — це повний модуль: експортована константа для кожної схеми об'єкта (дочірні визначені перед батьківськими, що на них посилаються), а далі export type Root = z.infer<typeof Root>, тож ви отримуєте типи часу компіляції безкоштовно. Використовуйте поле кореневої назви, щоб перейменувати схему верхнього рівня, і перемикач відсутніх ключів, щоб трактувати відсутні ключі як .optional() (за замовчуванням) або .nullable(). Скопіюйте результат або завантажте його як файл .ts.

Поширені запитання

Як типи JSON зіставляються з Zod?
string у z.string(), рядок дати-часу ISO у z.string().datetime(), цілі числа у z.number().int(), інші числа у z.number(), булеві у z.boolean(), null у z.null(), масиви у z.array(...), а об'єкти в іменований z.object({...}). Порожні масиви стають z.array(z.unknown()).
Як обробляються необов'язкові або nullable-поля?
Коли елементам масиву чи об'єднаним сусіднім об'єктам бракує ключа, цей ключ позначається .optional(). Значення, побачене як null, стає z.null() або додає .nullable(). Перемикач відсутніх ключів дозволяє видавати .optional() (за замовчуванням) або .nullable() для ключів, відсутніх у деяких зразках.
Чи отримаю я також тип TypeScript?
Так. Після схеми видається export type Root = z.infer<typeof Root>, тож виведений статичний тип походить із самої схеми — одне джерело істини як для валідації під час виконання, так і для типів часу компіляції.
Чи завантажується мій JSON кудись?
Ні. Розбір і генерація коду відбуваються повністю у вашому браузері за допомогою JSON.parse і звичайного JavaScript. Нічого не надсилається на сервер, тож ви можете безпечно вставляти приватні відповіді API.

Більше інструментів