Skip to content

JSON 转 Zod Schema 转换器

粘贴 JSON 即时获得可直接使用的 Zod schema,100% 在浏览器中运行。正确推断 z.number().int()、.optional() 和 .nullable(),并附带 z.infer 类型。免费。

无追踪 浏览器中运行 免费
选项
0 字符
Zod 输出
0
已针对真实 API 负载,对照 Zod v3 和 v4 的解析语义进行验证。 — Go Tools 工程团队 · 2026年7月2日

什么是 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. 1

    粘贴你的 JSON

    将 JSON 对象、数组或 API 响应放入输入框,转换即刻开始。

  2. 2

    调整输出

    重命名根 schema,切换 import 行、z.infer 类型或 export 关键字,以匹配你的项目风格。

  3. 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 schema,同时附带一个 z.infer 类型别名。点击「复制」即可获取 — 无需上传、无需账户、无需等待。
JSON 转 Zod 和 JSON Schema 转 Zod 有什么区别?
本工具接受一段 JSON 示例值 — API 响应或对象 — 并从其结构推断出 Zod schema。JSON Schema 转 Zod 是另一回事:它把已有的 JSON Schema 文档转换成 Zod。如果你手上是原始数据,请用本工具;如果你已经有 JSON Schema 文件,请改为转换那个。
如何从 schema 得到 TypeScript 类型?
每份结果都包含一个 z.infer 类型别名,因此你无需手写就能得到完全带类型的 Root。让 schema 作为唯一事实来源,由 TypeScript 推导类型,二者就永远不会脱节。如果你只想要 schema,可以在「选项」中关闭 z.infer 那一行。
可选字段和 null 字段是如何处理的?
当某个键只出现在部分数组元素中时,其字段会被标记为 .optional()。在部分样本中为 null、在其他样本中有类型的字段会变成 .nullable()。只会是 null 的字段会变成 z.null()。Zod 会独立处理 optional 和 nullable,因此 schema 能精确匹配你的数据实际的变化方式。
它会生成哪种数字类型?
整数映射为 z.number().int();任何带小数点或指数的值映射为 z.number()。如果某个字段在不同样本中混用整数和小数,它会统一为 z.number(),这样校验就绝不会拒绝一个合法的值。
输出能同时用于 Zod 3 和 Zod 4 吗?
可以。生成的代码使用通用且稳定的子集 — z.object、z.string、z.number、z.array、z.union、.int、.optional、.nullable 和 z.infer — 它们在 Zod 3 和 Zod 4 中行为一致。只需确保项目中已安装 zod 包即可。
如何用生成的 schema 校验数据?
导入 schema 后调用 RootSchema.parse(data),非法输入时会抛出异常;或调用 RootSchema.safeParse(data),不抛异常而返回带类型的成功或错误结果。这非常适合用在信任边界上,例如 API 响应、表单输入和环境配置。
数组和混合类型是如何处理的?
单一类型的数组会变成对应类型的 z.array。对象数组会逐键合并为一个元素 schema。混用多种原始类型的数组会变成 z.union,而更含糊的情况会回退到 z.unknown,方便你用更完整的样本进一步细化。
我的 JSON 数据是否私密安全?
是的。转换 100% 在浏览器中通过 JavaScript 完成。你的 JSON — 包括 token、ID 或客户数据 — 永不离开页面,也永不发送到服务器。
本工具免费吗?需要账户吗?
完全免费,无需注册,无使用限制,也没有广告干扰工作区。