跳到主要内容

严格验证:JSON To Zod Schema

使用 json-to-zod 库根据 JSON 示例生成 Zod schema。每个值对应 z.string()、z.number()、z.boolean()、z.null() 或嵌套的 z.object();空数组变为 z.array(z.unknown())。

为只有示例数据的 API 响应起草运行时校验器。

JSON

Zod Schema

适用场景

  • 为只有示例数据的 API 响应起草运行时校验器。
  • 无需手写 schema,就能为表单或配置加载器加上 Zod 校验。

使用方法

  1. 将有代表性的 JSON 示例粘贴到左侧编辑器。
  2. 如果不想用 schema 作为名称,打开设置并修改 Root Schema Name。
  3. 复制代码后再收紧规则:根据实际规范添加 .optional()、.email()、.min() 等。

JSON 示例

{
  "id": 42,
  "email": "[email protected]",
  "roles": ["admin", "editor"],
  "profile": { "nickname": null, "verified": true },
  "tags": []
}

Zod schema(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() 吗?

不会。示例中的每个键都是必填的。可选字段请自行标记。

规范与参考资料