分类: 开发工具

JSON 转 Zod Schema 工具

站方自主规划没找到想要的工具?

无需上传数据,从示例 JSON 生成 Zod schema

粘贴 JSON,在浏览器里生成 Zod schema。自动推断对象、数组、字符串、数字、布尔值、可空值和可选字段,并复制可直接用于 TypeScript 的结果。不会上传任何内容。

Zod Schema
import { z } from "zod";

export const userSchema = z.object({
  id: z.number(),
  name: z.string(),
  isActive: z.boolean(),
  score: z.null(),
  tags: z.array(z.string()),
  address: z.object({
    city: z.string(),
    country: z.string(),
  }),
  posts: z.array(z.object({
    slug: z.string(),
    views: z.number(),
    pinned: z.boolean().optional(),
  })),
});

export type User = z.infer<typeof userSchema>;

只根据这一份样本推断:它能看出某个字段装的是字符串,却看不出这个字符串必须是邮箱、必须满足最小长度,或者必须是几个允许值之一。请把输出当作起点,规则由你自己收紧。

本页的所有处理都在浏览器中完成,不会上传任何内容。

本页的所有处理都在浏览器中完成,不会上传任何内容。

这个工具能做什么

这个工具在本地读取 JSON 样本,起草与之对应的 Zod 对象 schema,包括嵌套对象、数组和联合类型。当数组里的对象并不一致时——某个元素有 `pinned` 字段而下一个没有——该键会被标记为 `.optional()`,而不是被悄悄丢掉,因为这种不一致往往正是你最需要注意到的地方。有时为 null 的值会变成 `.nullable()`,而不是一个两成员的联合类型。它做不到的,是凭空造出没见过的规则:样本数据只能说明某个字段装的是字符串,说明不了这个字符串必须是邮箱、必须短于 80 个字符,或者必须是三个允许值之一。输出是一副待你收紧的骨架,而不是一份写好的契约。

使用方法

  1. 粘贴一份有代表性的 JSON 样本——覆盖的变化越多,推断就越准。
  2. 给 schema 命名,并选择是否包含 zod 导入语句和推断出的类型。
  3. 复制生成的代码,再自己补上样本无法体现的字段规则。

隐私说明

本工具完全在你的浏览器中运行。输入的内容不会被上传、保存或分享,关闭标签页即随之消失。

常见问题

我的 JSON 会被上传吗?
不会。解析 JSON 和生成 schema 全都在浏览器标签页内完成;输入和输出都不会发送到服务器,也不会被记录或保存。
推断出来的校验有多准确?
和你的样本一样准。它能忠实地还原结构和类型,但无法知道结构表达不出的约束——格式、取值范围、枚举,或者在生产环境里哪些字段才是真正必填的。信任它之前,请逐个字段复核。
它支持数组和可选字段吗?
支持。数组会变成 z.array(...);当数组里的对象键不一致时,并非处处都有的键会被标记为 .optional()。有时为 null 的字段会变成 .nullable()。
生成的结果能在 TypeScript 里用吗?
可以。生成的文件会导出 schema;如果保留该选项,还会导出一个 `z.infer` 类型别名,于是校验器和与之匹配的静态类型都来自同一处定义。