如何生成 JSON Schema
- 粘贴一个有代表性的 JSON 示例。包含多个元素的数组效果最好,因为这些元素会被合并为同一个 Schema。
- 选择 Schema 版本(draft 2020-12 或 draft-07),并决定是否将属性标记为必需、是否识别格式以及是否禁止额外属性。
- 复制或下载 Schema,然后手动完善,例如添加描述、枚举值或最小值和最大值。
生成器能推断出哪些内容
| JSON 示例 | Schema |
|---|---|
"ada@example.com" | {"type": "string", "format": "email"} |
"2026-05-01T10:00:00Z" | 格式 date-time(还支持 date、time、uri、uuid、ipv4) |
42 / 4.5 | "integer" / "number" |
| 每个对象中都存在的键 | 列入 required |
| 部分数组元素中缺失的键 | 可选(不在 required 中) |
[1, "a", null] | "items": {"type": ["string", "integer", "null"]} |
| 对象与普通值混合 | anyOf,每种类型各一个 Schema |
JSON Schema 是什么?
JSON Schema 是一套用于描述和校验 JSON 数据结构的规范:它定义了有哪些属性、每个属性是什么类型、哪些属性是必需的,以及允许哪些取值。它被广泛用于 OpenAPI 中的 API 契约、配置文件、表单生成,以及校验 AI 模型的结构化输出。当前版本是 2020-12,许多较旧的工具仍然支持 draft-07。规范发布在 json-schema.org 上。
完善生成的 Schema
- 添加
title和description,说明每个字段的含义。 - 使用
enum、minimum、maximum、maxLength或pattern限制取值。 - 勾选禁止额外属性(
additionalProperties: false),以拒绝未知的键。 - 在 JavaScript 中使用 Ajv,或在 Python 中使用
jsonschema包来校验数据。
常见问题
应该使用哪个 JSON Schema 版本?
新项目请使用 draft 2020-12,它是当前版本,也是 OpenAPI 3.1 的基础。如果你的校验器或工具链尚不支持 2020-12,请选择 draft-07。
为什么所有属性都被标记为必需?
只有一个示例对象时,每个属性都存在,因此全部会被标记为必需。请使用包含多个不同示例的数组,或关闭将属性标记为必需。
生成器能识别枚举或取值范围吗?
不能。单个示例无法说明一般情况下允许哪些值,因此枚举、最小值和最大值以及正则模式都需要手动添加。
如何根据 Schema 校验 JSON?
使用校验库,例如 JavaScript 的 Ajv 或 Python 的 jsonschema。许多代码编辑器也会根据 JSON 文件中 $schema 属性引用的 Schema 自动校验该文件。