Перейти до вмісту

JSON в схему Zod

Генеруйте Zod-схему валідації та типи TypeScript з прикладу JSON з автоматичним розпізнаванням форматів та перелічень.

Введення
Вихід

JSON в схему Zod

Вставте приклад JSON — відповідь API, файл конфігурації, рядок бази даних — і отримайте готову до використання Zod-схему в TypeScript. Типи виводяться для кожного поля: примітиви відображаються на z.string(), z.number() та z.boolean(), масиви мають виведений тип елемента, а значення, яке відрізняється між виявленнями, стає z.union(). Рядок, який виглядає як адреса електронної пошти, URL, UUID або дата ISO, отримує відповідний валідатор — .email(), .url(), .uuid(), .date() або .datetime() — замість звичайного z.string().

Передайте йому масив однаково сформованих об'єктів, таких як рядки з кінцевої точки списку, і генератор об'єднує кожен елемент перед типізацією поля: ключ, відсутній в деяких рядках, стає .optional(), ключ, який іноді дорівнює null, стає .nullable() або .optional() залежно від обраного параметра, а поле, яке повторює невеликий набір значень — стовпець статусу або ролі — стає правильним z.enum() замість відкритого рядка. Увімкніть «Розділити вкладені об'єкти», щоб витягти кожен вкладений об'єкт у свій власний іменований експорт замість одного глибоко вкладеного літерала, де однакові форми автоматично ділять одну схему. Увімкніть «Строгі об'єкти», щоб відхилити будь-який ключ, який приклад ніколи не показував, перехоплюючи помилки друку та неочікувані поля API під час розбору замість пізніше в потоці.

Назвіть експортовану схему так, як ваш код її очікує, і при необхідності додайте export type X = z.infer<typeof X> прямо нижче, щоб валідатор часу виконання та тип часу компіляції походили з одного джерела і ніколи не могли мовчки розійтися.

Все працює локально у вашому браузері. JSON, який ви вставляєте — відповіді API з токенами, записи користувачів, внутрішні корисні навантаження — аналізуються та типізуються повністю на вашому пристрої і ніколи не завантажуються нікуди. Вставте приклад, скопіюйте згенеровану схему в свій проект і почніть валідувати те, що ви аналізуєте.

FAQ

Як вибирається між .optional() та .nullable()?
Ключ, відсутній у деяких зразках масиву, завжди є .optional() — немає інших способів дозволити відсутній ключ. Ключ, який є присутнім але іноді дорівнює null, неоднозначний, тому параметр «Обробка null» вирішує: nullable точно типізує його з .nullable(), optional розглядає значення null як відсутнє.
Як обробляються вкладені об'єкти?
За замовчуванням вкладений об'єкт типізується вбудованим способом, прямо там, де він з'являється. Увімкніть «Розділити вкладені об'єкти», щоб кожна вкладена форма мала своє export const ...Schema, і однакові форми автоматично ділять одну схему замість її дублювання.
Коли поле стає z.enum() замість z.string()?
Коли опція «Визначити перелічення» увімкнена і поле повторює невеликий набір різних значень рядків — від 2 до 5 — у масиві зразків, такий як стовпець статусу або категорії. Поле тільки з унікальними значеннями або занадто багатьма різними залишається z.string().
Що робить опція «Строгі об'єкти»?
Вона додає .strict() до кожного згенерованого z.object(), тому розбір закінчується помилкою, якщо вхідні дані містять ключ, який приклад ніколи не показував — корисно для перехоплення помилок друку або оголошених додавань API замість їх мовчазного ігнорування.
Мій JSON завантажується де-небудь?
Ні. Схема генерується повністю у вашому браузері — ваш JSON ніколи не залишає ваш пристрій.