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(). Ключи объектов, не являющиеся допустимыми идентификаторами, безопасно заключаются в кавычки.

Результат — полноценный модуль: экспортируемая const для каждой схемы объекта (потомки определяются раньше родителей, которые на них ссылаются), за которой следует 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.

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