Перейти к содержимому

Преобразование JSON в схему Zod

Генерирует схему Zod по образцу JSON с помощью библиотеки json-to-zod. Каждое значение отображается в z.string(), z.number(), z.boolean(), z.null() или вложенный z.object(); пустые массивы становятся z.array(z.unknown()).

Набросать runtime-валидатор для ответа API, у которого есть только пример.

JSON

Zod Schema

Когда пригодится

  • Набросать runtime-валидатор для ответа API, у которого есть только пример.
  • Добавить валидацию Zod в форму или загрузчик конфигурации, не описывая схему вручную.

Как пользоваться

  1. Вставьте репрезентативный образец JSON в левый редактор.
  2. Откройте настройки и задайте "Root Schema Name", если нужно имя, отличное от schema.
  3. Скопируйте код и уточните его: добавьте .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() для отсутствующих полей?

Нет. Каждый ключ из образца обязателен. Отмечайте необязательные поля сами.

Спецификации и справка