开发者 / 类型
JSON 转 Zod Schema 转换器
根据 JSON 示例生成 Zod schema 及其 TypeScript 类型,支持嵌套对象、数组、可选字段、可空字段和整数。
JSON 转 Zod Schema 转换器: 示例中的每个对象都会转换为一个 z.object schema,并导出由该 schema 推断出的类型;嵌套对象也会获得各自命名的 schema。数组中的对象会进行合并:某些对象中缺失的键会添加 .optional(),有时为 null 的键会添加 .nullable(),整数则会添加 .int()。生成的 schema 已通过使用 Zod 解析其自身示例进行检查。 完全在浏览器中本地运行,文件不会上传到服务器。
- 类别
- 开发者工具
- 使用次数
- 在浏览器中
- 费用
- 免费·无需注册
- 可用性
- 可直接使用
完全在浏览器中运行
TypeScript
import { z } from "zod";
export const AddressSchema = z.object({
city: z.string(),
zip_code: z.string(),
});
export type Address = z.infer<typeof AddressSchema>;
export const UserSchema = z.object({
id: z.number().int(),
user_name: z.string(),
avatar_url: z.string(),
score: z.number(),
tags: z.array(z.string()),
address: AddressSchema,
manager_id: z.number().int().nullable(),
nickname: z.string().optional(),
});
export type User = z.infer<typeof UserSchema>;
export const UserListSchema = z.array(UserSchema);
每个对象都会获得一个架构和推断类型。部分对象中缺失的键会添加.optional(),有时为null的键会添加.nullable(),整数会添加.int();对于API无法保证的规则,请适当放宽。
使用架构
调用Schema.parse(data)可验证数据并在数据错误时抛出异常,或调用Schema.safeParse(data)获取可检查的结果,无需使用try和catch。导出的类型来自z.infer,编辑架构时会与架构保持同步。
如果只需要编译时类型,JSON到TypeScript会提供普通接口;如需根据现有JSON Schema进行验证,请使用JSON Schema验证工具。
收紧生成的规则
示例只展示其中包含的内容,因此应将架构视为起点:对于适用的字符串,添加.email()、.url()或.datetime();对于取值固定的字段,使用z.enum([...]);如果数据有范围限制,则添加.min()或.max()。
使用方法
- 粘贴 JSON 示例,最好使用包含多个典型记录的数组。
- 为顶层类型命名。
- 复制生成的 schema,并使用它们在运行时验证数据。
隐私与限制
JSON 会在浏览器中转换,绝不会上传。
相关工具
常见问题
为什么使用 Zod,而不是 TypeScript 接口?
代码编译后,接口会消失,因此无法在运行时检查数据;Zod schema 可以检查数据,并通过 z.infer 提供相同的类型。
整数真的应该使用 .int() 吗?
只有当你的 API 保证使用整数时才应使用。如果价格或分数可能包含小数,即使示例中只有整数,也应移除 .int()。
它能处理日期或电子邮件之类的字符串吗?
这些字符串会被标记为 z.string();根据数据需求,添加 .email()、.url() 或日期检查等细化验证。
免费工具·使用在浏览器中次·无需账户