严格验证: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 响应起草运行时校验器。
适用场景
- 为只有示例数据的 API 响应起草运行时校验器。
- 无需手写 schema,就能为表单或配置加载器加上 Zod 校验。
使用方法
- 将有代表性的 JSON 示例粘贴到左侧编辑器。
- 如果不想用 schema 作为名称,打开设置并修改 Root Schema Name。
- 复制代码后再收紧规则:根据实际规范添加 .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() 吗?
不会。示例中的每个键都是必填的。可选字段请自行标记。