开发者 / 类型

JSON 转 Zod Schema 转换器

根据 JSON 示例生成 Zod schema 及其 TypeScript 类型,支持嵌套对象、数组、可选字段、可空字段和整数。

JSON 转 Zod Schema 转换器: 示例中的每个对象都会转换为一个 z.object schema,并导出由该 schema 推断出的类型;嵌套对象也会获得各自命名的 schema。数组中的对象会进行合并:某些对象中缺失的键会添加 .optional(),有时为 null 的键会添加 .nullable(),整数则会添加 .int()。生成的 schema 已通过使用 Zod 解析其自身示例进行检查。 完全在浏览器中本地运行,文件不会上传到服务器。

使用次数
在浏览器中
费用
免费·无需注册
可用性
可直接使用
JSON转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()。

使用方法

  1. 粘贴 JSON 示例,最好使用包含多个典型记录的数组。
  2. 为顶层类型命名。
  3. 复制生成的 schema,并使用它们在运行时验证数据。

隐私与限制

JSON 会在浏览器中转换,绝不会上传。

相关工具

常见问题

为什么使用 Zod,而不是 TypeScript 接口?

代码编译后,接口会消失,因此无法在运行时检查数据;Zod schema 可以检查数据,并通过 z.infer 提供相同的类型。

整数真的应该使用 .int() 吗?

只有当你的 API 保证使用整数时才应使用。如果价格或分数可能包含小数,即使示例中只有整数,也应移除 .int()。

它能处理日期或电子邮件之类的字符串吗?

这些字符串会被标记为 z.string();根据数据需求,添加 .email()、.url() 或日期检查等细化验证。

免费工具·使用在浏览器中次·无需账户