实用工具
输入
结果
结果会显示在这里。TypeScript 类型编译后就没了,而 Zod schema 在响应真正到达时依然存在,用 z.infer 还能反推出类型。这里用 quicktype 的 typescript-zod 生成器从样本生成 schema:按 Zod 4 推荐的写法 import * as z from "zod" 引入,每种对象结构一个 schema,并在旁边导出推导出的类型。我们的测试会在 zod 4 下实际运行生成的代码,确认它能校验通过生成它的那份样本——这是生成的 schema 起码该做到的。
它是怎么工作的
- 数组里部分元素缺失的键生成 .optional(),有时为 null 的键生成与 z.null() 的联合。
- schema 按依赖顺序输出,每个嵌套 schema 都声明在引用它的对象 schema 之前。
- 打开日期识别后,ISO 时间戳生成 z.coerce.date(),解析时会把字符串转成 Date;关掉则保持 z.string()。
- 生成的都是普通的 z.object,解析时会丢弃未知键;需要别的行为就手动改成 z.strictObject 或 z.looseObject。
你的数据去了哪里
哪也没去。本工具完全在你的浏览器里运行:你粘贴的文本由页面处理,不会传输到任何服务器,也不会写进任何日志。
本工具免费且无需登录,运行结果只存在于你当前的页面里,不会被保存到任何地方。
它要花多少
本工具完全免费,不需要登录,也不消耗积分。
常见问题
- 生成的代码能用在 Zod 3 上吗?
- 可以。用到的 z.object、z.array、z.union、z.null、.optional() 和 z.coerce.date() 在两个大版本里都有,命名空间导入的写法在 3.x 也能用。两个版本的差别在错误信息格式和一些高级 API 上,生成的代码都没有涉及。
- 为什么顶层 schema 是另一个 schema 的数组?
- 因为样本本身是数组。元素的结构有自己的 schema(示例数据里是 RepoElementSchema),顶层名字用在数组上,所以同一份文件既能校验单个元素,也能校验整个列表。
- 生成的 schema 有多严格?
- 和样本一样严格,也就是不太严格。字符串字段接受任意字符串,而不只是你贴的那些值;数字不管是不是整数都是 z.number()。之后可以按接口约定用 .int()、z.url()、z.email() 或 z.enum() 收紧,一份样本表达不了这些约束。
背后的开源项目
本工具运行在 glideapps/quicktype 之上,以 Apache-2.0 许可发布。如果你需要在自己的程序里实现同样的能力,直接用这个库。
glideapps/quicktype也常被称作
- json转zod
- zod schema生成
- json生成zod
- zod在线
- typescript运行时校验
- zod v4