分类: 开发工具
JSON 转 Zod Schema 工具
无需上传数据,从示例 JSON 生成 Zod schema
粘贴 JSON,在浏览器里生成 Zod schema。自动推断对象、数组、字符串、数字、布尔值、可空值和可选字段,并复制可直接用于 TypeScript 的结果。不会上传任何内容。
Zod Schema
import { z } from "zod";
export const userSchema = z.object({
id: z.number(),
name: z.string(),
isActive: z.boolean(),
score: z.null(),
tags: z.array(z.string()),
address: z.object({
city: z.string(),
country: z.string(),
}),
posts: z.array(z.object({
slug: z.string(),
views: z.number(),
pinned: z.boolean().optional(),
})),
});
export type User = z.infer<typeof userSchema>;
只根据这一份样本推断:它能看出某个字段装的是字符串,却看不出这个字符串必须是邮箱、必须满足最小长度,或者必须是几个允许值之一。请把输出当作起点,规则由你自己收紧。
本页的所有处理都在浏览器中完成,不会上传任何内容。
本页的所有处理都在浏览器中完成,不会上传任何内容。
这个工具能做什么
这个工具在本地读取 JSON 样本,起草与之对应的 Zod 对象 schema,包括嵌套对象、数组和联合类型。当数组里的对象并不一致时——某个元素有 `pinned` 字段而下一个没有——该键会被标记为 `.optional()`,而不是被悄悄丢掉,因为这种不一致往往正是你最需要注意到的地方。有时为 null 的值会变成 `.nullable()`,而不是一个两成员的联合类型。它做不到的,是凭空造出没见过的规则:样本数据只能说明某个字段装的是字符串,说明不了这个字符串必须是邮箱、必须短于 80 个字符,或者必须是三个允许值之一。输出是一副待你收紧的骨架,而不是一份写好的契约。
使用方法
- 粘贴一份有代表性的 JSON 样本——覆盖的变化越多,推断就越准。
- 给 schema 命名,并选择是否包含 zod 导入语句和推断出的类型。
- 复制生成的代码,再自己补上样本无法体现的字段规则。
隐私说明
本工具完全在你的浏览器中运行。输入的内容不会被上传、保存或分享,关闭标签页即随之消失。
常见问题
- 我的 JSON 会被上传吗?
- 不会。解析 JSON 和生成 schema 全都在浏览器标签页内完成;输入和输出都不会发送到服务器,也不会被记录或保存。
- 推断出来的校验有多准确?
- 和你的样本一样准。它能忠实地还原结构和类型,但无法知道结构表达不出的约束——格式、取值范围、枚举,或者在生产环境里哪些字段才是真正必填的。信任它之前,请逐个字段复核。
- 它支持数组和可选字段吗?
- 支持。数组会变成 z.array(...);当数组里的对象键不一致时,并非处处都有的键会被标记为 .optional()。有时为 null 的字段会变成 .nullable()。
- 生成的结果能在 TypeScript 里用吗?
- 可以。生成的文件会导出 schema;如果保留该选项,还会导出一个 `z.infer` 类型别名,于是校验器和与之匹配的静态类型都来自同一处定义。