跳到正文

JSON 转 Zod 校验模式

JSON to Zod Schema

从 JSON 样例构建 Zod schema,自动推断 nullable、optional 和枚举。

把一份 JSON 样例文档变成 Zod schema——TypeScript 类型给不了的运行时检查。输出是一组按声明顺序排列的 `z.object` 常量,外加根的推断类型,所以粘贴一次同时得到解析器和类型。

🔒 完全在你的浏览器里运行zodjsoncodegenvalidation
生成语言

示例 JSON

拖入 .json 文件

在这个标签页里读取,不上传。

手上有几条就全放进来。每多一条记录,推断就更收紧一点——某条里缺了的字段,正是它被判成可选的依据。

TypeScript

怎么用

  1. 有多少条记录就粘贴多少

    每个数组的每个元素都会被读取并合并,不只是第一个。三条记录告诉它的远比一条多,因为某个字段在其中一条里缺失,正是让那个字段变成可选的依据。

  2. 给根类型起名

    嵌套对象按持有它的键命名,数组会转成单数,所以 `users` 得到 `User`。只有根需要你起名。

  3. 读输出下方的计数

    类型数、可选字段数、联合类型数,以及合并了多少条记录。联合类型计数大于零,说明某个字段在你的样本里出现过两种不同的值——把结果粘进代码库之前值得看一眼。

  4. 粘进去,用它解析

    各个块按子先父后的顺序输出,这在 Zod 里很要紧:一个引用了后面才声明的常量的 `z.object` 会在导入时抛错,而不是类型检查失败。请保持生成的顺序。

常见问题

为什么 schema 和我的接口契约不一致?

因为它描述的是样本,不是契约。标成可选的字段只是在你粘贴的某一条记录里没出现;标成必填的字段,在你还没见够的接口里仍然可能是可选的。把输出当作一份需要手工收紧的初稿。

有没有 email、uuid、最小长度这类细化规则?

没有。全部是 `z.string()`、`z.number()` 或 `z.boolean()`,样本里所有数字都是整数时加 `.int()`。因为字符串里有个 @ 就加 `.email()` 是猜测,而一条错的细化规则会在生产环境拒绝合法数据。

空数组会变成什么?

变成 `z.array(z.unknown())`,因为空数组对元素类型什么都没说。粘一条数组不为空的记录,schema 就会自己填上。

这是给哪个 Zod 版本用的?

输出的调用是 Zod 3 和 4 里相同的那些——`z.object`、`z.array`、`z.union`、`.nullable()`、`.optional()`,以及双参数形式的 `z.record(z.string(), z.unknown())`。没有用到任何版本特有的东西。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。