在线 JSON 转 Zod 模式生成器
从 JSON 示例即时生成 Zod 模式,就在你的浏览器中。你的 JSON 留在你的设备上。
你的 JSON 完全在你的浏览器中被解析并转换为 Zod 模式,因此它留在你的设备上,不会上传到任何服务器。
想要纯粹的 TypeScript 接口?试试 JSON 转 TypeScript。
关于 JSON 转 Zod
这款 json 转 zod 转换器能在几秒内将示例 JSON 对象或数组转为可直接使用的 Zod 模式。粘贴真实的 API 响应,它会推断每个值:字符串变成 z.string(),整数变成 z.number().int(),小数变成 z.number(),布尔值变成 z.boolean(),null 变成 z.null()。数组会变成 z.array() 并统一其元素形态,嵌套对象会变成嵌套的 z.object({...}) 调用,使模式精确镜像你的数据。它专为希望快速使用 zod 模式生成器、而非手写校验器的 TypeScript 开发者而打造,无论你是在搭建表单校验、为接口定义类型,还是在探索陌生载荷时从 json 生成 zod。为根模式命名,并可选择导出推断出的类型。一切都在你的浏览器本地运行,因此你粘贴的 JSON 在你的设备上处理,不会上传到任何服务器。
功能特性
- 从任意 JSON 对象或数组生成命名的 Zod 模式
- 从你的示例推断 z.string()、z.number()、z.boolean() 和 z.null()
- 检测整数并为其生成 z.number().int()
- 将嵌套对象转为嵌套的 z.object({...}) 调用
- 将数组包裹在 z.array() 中,并将混合元素统一为 z.union()
- 可选地用 z.infer<typeof Schema> 导出推断出的类型
- 允许你重命名根模式,并内联显示 JSON 解析错误
- 复制模式或将其下载为 .ts 文件
如何使用 JSON 转 Zod
- 将你的 JSON 对象或数组粘贴到输入框中。
- 设置模式名称,或保留为 Schema。
- 根据你的需要开启或关闭推断类型导出。
- 查看生成的 Zod 模式,然后复制它或将其下载为 .ts 文件。
示例
输入
{ "id": 1, "name": "Ada", "tags": ["a", "b"] }
输出
export const Schema = z.object({
id: z.number().int(),
name: z.string(),
tags: z.array(z.string()),
});
一个扁平的 JSON 对象会变成带类型的 z.object 模式。
常见错误与故障排除
- 输出显示一个带行号和列号的「Invalid JSON」横幅。 — 该 JSON 存在语法问题,例如末尾逗号、单引号或未加引号的键。在报告的行号与列号处修复它,模式便会重新生成。
- 某个字段输出为 z.array(z.unknown()) 而非真实的元素类型。 — 该数组在你的示例中为空,因此无法推断出元素类型。请至少包含一个元素,模式就会推断出其形态的 z.array()。
- 某个整数被定为 z.number().int(),但你想要纯粹的 z.number()。 — 整数会从示例中被检测为 z.number().int()。如果该字段也可能持有小数,请将生成的那一行改为 z.number()。
- 某个对象属性输出为 z.null()。 — 该键的每个示例值都是 null。请提供一个含真实值的示例,或在你知道其具体类型后自行用 .nullable() 包裹该字段。
常见问题
- JSON 转 Zod 生成器能做什么?
- 它会读取示例 JSON 对象或数组,并生成匹配的 TypeScript 版 Zod 模式,为每个值推断出 z.string()、z.number()、z.boolean()、z.null()、z.array() 或 z.object(),让你能将其直接放入代码库中。
- 它支持 Zod v4 吗?
- 支持。该模式使用核心构造器 z.string()、z.number()、z.boolean()、z.null()、z.array() 和 z.object(),它们在 Zod v3 与 v4 中完全相同,因此只要你从 zod 导入 z,输出在任一版本下都能工作。
- 可选或可空字段是如何处理的?
- 在示例中为 null 的字段会变成 z.null()。由于单个示例无法判断哪些键是可选的,因此不会自动将任何字段标记为 .optional() —— 请在字段可能缺失或为 null 处自行添加 .optional() 或 .nullable()。
- 它如何区分整数和浮点数?
- 你示例中的整数会变成 z.number().int(),带小数部分的数字会变成 z.number()。如果某个字段两者都可能持有,请将生成的那一行改为 z.number(),使其两者皆可接受。
- 嵌套对象和数组是如何被转换的?
- 嵌套对象会变成嵌套的 z.object({...}) 调用,使模式镜像你的 JSON,而数组会变成内含元素模式的 z.array()。空数组会变成 z.array(z.unknown())。
- 生成 Zod 模式时,我的 JSON 会被发送到任何地方吗?
- 不会。JSON 转 Zod 的转换完全在你的浏览器中运行,因此你粘贴的数据在本地处理,绝不离开你的设备。
相关工具
全部 ArrayKit 工具