JSON 转 Zod Schema 转换器
粘贴 JSON 即时获得可直接使用的 Zod schema,100% 在浏览器中运行。正确推断 z.number().int()、.optional() 和 .nullable(),并附带 z.infer 类型。免费。
选项
什么是 Zod schema?
Zod schema 是一种以 TypeScript 为先的值结构描述,它在运行时校验数据,并在编译时推导出静态类型。从一段 JSON 示例生成它,意味着你再也不用为 API 响应、表单或配置文件手写校验样板代码。这个 Zod schema 生成器会推断正确的类型,把缺失的键标记为 .optional(),把 null 值标记为 .nullable(),并交给你一个 z.infer 类型 — 全部 100% 在浏览器中完成。
示例
API 响应
{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]} import { z } from "zod";
export const RootSchema = z.object({
id: z.number().int(),
name: z.string(),
email: z.string(),
active: z.boolean(),
roles: z.array(z.string()),
});
export type Root = z.infer<typeof RootSchema>;
典型的 REST 负载会变成可直接使用的 Zod schema。整数会推断为 z.number().int(),roles 数组变成 z.array(z.string())。还免费附带一个 z.infer 类型。
嵌套对象
{"repo":"zod","owner":{"login":"colinhacks","id":100}} import { z } from "zod";
export const OwnerSchema = z.object({
login: z.string(),
id: z.number().int(),
});
export const RootSchema = z.object({
repo: z.string(),
owner: OwnerSchema,
});
export type Root = z.infer<typeof RootSchema>;
嵌套对象会成为独立命名的 schema(OwnerSchema),按字段引用。子 schema 会在使用它的父级之前声明,结构相同的只声明一次并复用。
对象数组(可选字段)
{"users":[{"id":1,"nick":"x"},{"id":2}]} import { z } from "zod";
export const UserSchema = z.object({
id: z.number().int(),
nick: z.string().optional(),
});
export const RootSchema = z.object({
users: z.array(UserSchema),
});
export type Root = z.infer<typeof RootSchema>;
对象数组会合并为一个元素 schema。部分元素缺失的键会变成 .optional(),因此该键不存在时解析仍能成功。
可空字段与数字统一
{"items":[{"sku":"A1","discount":0.1},{"sku":"A2","discount":null}]} import { z } from "zod";
export const ItemSchema = z.object({
sku: z.string(),
discount: z.number().nullable(),
});
export const RootSchema = z.object({
items: z.array(ItemSchema),
});
export type Root = z.infer<typeof RootSchema>;
在部分样本中为 null、在其他样本中有类型的字段会变成 .nullable()。因为 0.1 带有小数点,数字会统一为 z.number() 而非 z.number().int()。
如何将 JSON 转换为 Zod
- 1
粘贴你的 JSON
将 JSON 对象、数组或 API 响应放入输入框,转换即刻开始。
- 2
调整输出
重命名根 schema,切换 import 行、z.infer 类型或 export 关键字,以匹配你的项目风格。
- 3
复制或下载
一键获取生成的 Zod schema,直接粘贴到你的校验层。
Common Use Cases
- 校验 API 响应
- 将 REST 或 GraphQL 响应示例转换为 Zod schema,并在 fetch 边界处解析,这样格式错误的数据会以清晰的错误快速失败,而不会渗入你的应用。
- 类型安全的表单与输入
- 为表单或查询输入生成 schema,并在 UI 和处理函数间复用 z.infer 类型,实现端到端的类型安全。
- tRPC 与 AI 工具 schema
- 从一个示例负载快速搭建 tRPC 过程或 AI 结构化输出工具的输入与输出 schema,无需手写。
转换原理
- 结构推断
- 每个对象都会成为一个命名 schema;结构相同的只声明一次并复用。对象数组会逐键合并,部分元素缺失的键会变成 .optional()。
- 正确的类型映射
- 整数映射为 z.number().int(),小数映射为 z.number()。字符串、布尔值和 null 分别映射为 z.string()、z.boolean() 和 z.null();混合原始类型的数组会变成 z.union()。
- 内置 TypeScript 类型
- 会为根 schema 生成一个 z.infer 类型别名,因此 schema 始终是唯一事实来源,你的类型永远不会与校验脱节。
- 100% 浏览器端
- 解析和生成都在浏览器中运行,没有任何网络请求,因此你的数据保持私密。
编写整洁 Zod schema 的技巧
- 为根 schema 命名
- 设置一个有意义的根名称(如 User 或 ApiResponse),而非默认的 Root,让代码更易读、自带文档。
- 细化 z.unknown() 和联合类型
- 空数组或混合数组会产生 z.unknown() 或宽泛的 z.union()。请粘贴更完整、有代表性的样本,让工具推断出精确的类型,再收紧任何仍然含糊的部分。
- 在边界处校验
- 在不受信任的数据进入之处调用 safeParse() — API 响应、表单输入、webhook — 这样坏数据在到达你的应用逻辑之前就会被拦截。
常见问题
如何将 JSON 转换为 Zod schema?
JSON 转 Zod 和 JSON Schema 转 Zod 有什么区别?
如何从 schema 得到 TypeScript 类型?
可选字段和 null 字段是如何处理的?
它会生成哪种数字类型?
输出能同时用于 Zod 3 和 Zod 4 吗?
如何用生成的 schema 校验数据?
数组和混合类型是如何处理的?
我的 JSON 数据是否私密安全?
本工具免费吗?需要账户吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
Base64 转图片转换工具
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
.env 转 JSON 转换器
编码和格式化
粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。
免费 HTML 实体解码器 — 解码 HTML
编码和格式化
在线解码 HTML 实体、还原转义后的 HTML——免费、免注册、100% 在浏览器中运行。把命名、十进制和十六进制引用转回字符;绝不上传。
免费 HTML 实体编码器 — 转义 HTML
编码和格式化
在线编码 HTML 实体、转义特殊字符(< > & " ')——免费、免注册、100% 在浏览器中运行。支持命名、十进制或十六进制输出;绝不上传。