Преобразование JSON в схему Zod
Генерирует схему Zod по образцу JSON с помощью библиотеки json-to-zod. Каждое значение отображается в z.string(), z.number(), z.boolean(), z.null() или вложенный z.object(); пустые массивы становятся z.array(z.unknown()).
Набросать runtime-валидатор для ответа API, у которого есть только пример.
Когда пригодится
- Набросать runtime-валидатор для ответа API, у которого есть только пример.
- Добавить валидацию Zod в форму или загрузчик конфигурации, не описывая схему вручную.
Как пользоваться
- Вставьте репрезентативный образец JSON в левый редактор.
- Откройте настройки и задайте "Root Schema Name", если нужно имя, отличное от schema.
- Скопируйте код и уточните его: добавьте .optional(), .email(), .min() и подобные правила из вашей реальной спецификации.
Образец JSON
{
"id": 42,
"email": "[email protected]",
"roles": ["admin", "editor"],
"profile": { "nickname": null, "verified": true },
"tags": []
}Схема Zod (TypeScript)
import { z } from "zod"
export const schema = z.object({
id: z.number(),
email: z.string(),
roles: z.array(z.string()),
profile: z.object({ nickname: z.null(), verified: z.boolean() }),
tags: z.array(z.unknown()),
})Подробности и ограничения
Генерация выполняется в браузере; библиотека загружается по требованию.
Типы берутся из одного образца. null становится только z.null(), а не .nullable(), и отсутствующие ключи никогда не помечаются как необязательные.
Массивы с элементами разной формы становятся z.union([...]) из всех форм, которые может понадобиться объединить вручную.
Форматы вроде email, даты или UUID не распознаются; все они становятся z.string().
FAQ
Можно ли преобразовать JSON-массив на корневом уровне?
Да. Корневой массив становится z.array(...). Если у его объектов разные ключи, каждый отличающийся объект становится членом z.union.
Как типизируются значения null?
Как z.null(), который принимает только null. Если поле может содержать и строку, замените на z.string().nullable().
Добавляет ли он .optional() для отсутствующих полей?
Нет. Каждый ключ из образца обязателен. Отмечайте необязательные поля сами.