UTILS.
100% 浏览器内运行
🛡️

JSON 转 Zod Schema

粘贴一个 JSON 示例值,生成 Zod schema 以及推断出的 TypeScript 类型,一份结构既在运行时校验,又在编译时提供类型。

输出

关于此工具

JSON 转 Zod Schema 工具可将粘贴的 JSON 示例转换为可直接使用的 Zod schema 以及对应的 TypeScript 类型。Zod 是 TypeScript 领域主流的校验库,而为真实的 API 载荷手写 z.object 树既慢又容易出错。此转换器用 JSON.parse 解析你的 JSON,递归遍历该值,并输出符合惯例的 Zod:字符串变为 z.string(),整数变为 z.number().int(),其他数字变为 z.number(),布尔值变为 z.boolean(),null 变为 z.null(),嵌套对象则各自生成命名的 z.object({...}) schema。

所有处理都在你的浏览器本地进行——你的 JSON 在页面内解析,永不上传,因此敏感载荷始终留在你的设备上。数组通过深度合并每个元素来推断其元素类型,因此一个键略有不同的对象数组会生成一份 schema,其中某些元素缺失的键会被标记为 .optional()。ISO-8601 日期时间字符串会被识别并输出为 z.string().datetime()。不是有效标识符的对象键会被安全地加上引号。

输出是一个完整的模块:每个对象 schema 有一个导出的 const(子级定义在引用它们的父级之前),后面跟着 export type Root = z.infer<typeof Root>,让你免费获得编译时类型。使用根名称框可重命名顶层 schema,用缺失键开关可将缺失的键处理为 .optional()(默认)或 .nullable()。复制结果,或将其下载为 .ts 文件。

常见问题

JSON 类型如何映射到 Zod?
string 映射为 z.string(),ISO 日期时间字符串映射为 z.string().datetime(),整数映射为 z.number().int(),其他数字映射为 z.number(),布尔值映射为 z.boolean(),null 映射为 z.null(),数组映射为 z.array(...),对象映射为命名的 z.object({...})。空数组变为 z.array(z.unknown())。
如何处理可选或可为空的字段?
当数组的元素或合并后的同级缺少某个键时,该键会被标记为 .optional()。被视为 null 的值会变为 z.null() 或添加 .nullable()。缺失键开关让你为某些样本中缺失的键输出 .optional()(默认)或 .nullable()。
它也会给我 TypeScript 类型吗?
是的。schema 之后会输出 export type Root = z.infer<typeof Root>,因此推断出的静态类型是从 schema 本身派生的——运行时校验与编译时类型共用同一份来源。
我的 JSON 会被上传到某处吗?
不会。解析和代码生成完全在你的浏览器中用 JSON.parse 和纯 JavaScript 完成。没有任何内容发送到服务器,因此你可以放心粘贴私有的 API 响应。

更多工具