JSON Schema 生成器与校验器
从样本生成 JSON Schema,或根据 schema 校验一个 JSON 文档,就在你的浏览器中完成。你的数据绝不会离开你的设备。
schema 生成与 Ajv 校验都在你的浏览器本地运行,因此你的 JSON 样本、schema 和文档绝不会上传。
需要 TypeScript 类型?试试 JSON 转 TypeScript。
关于 JSON Schema 生成器
这款 JSON Schema 生成器会把一个 JSON 样本转换为一份即用型 JSON Schema,内置的校验器则会根据你提供的 schema 检查任意 JSON 文档。在「生成」模式下,它会遍历你的样本,为对象、数组、字符串、数字、布尔值和 null 推断类型,统一数组元素,还能将每个属性标记为 required、把 additionalProperties 设为 false,并检测 email、date、date-time、uri 和 uuid 等字符串格式。输出可选择 draft-07 或 2020-12。在「校验」模式下,它会用启用了 allErrors 和 ajv-formats 的 Ajv 运行,然后列出每个失败项及其实例路径和消息。它专为 API 开发者、后端工程师,以及任何定义或测试 JSON 契约的人而打造。一切都在你的浏览器中运行,因此你粘贴的样本和 schema 留在你的设备上。
功能特性
- 从粘贴的 JSON 样本推断 JSON Schema,为对象、数组、字符串、数字、整数、布尔值和 null 给出正确类型
- 将数组元素统一为单个 items schema,并为空数组生成 items:{}
- 可逐对象将每个属性标记为 required 的开关
- 可将 additionalProperties:false 的开关用于把对象锁定为已知键
- 可选的字符串格式推断,识别 email、date、date-time、uri 和 uuid 值
- 选择 draft-07 或 2020-12 输出,以设置 $schema 方言
- 使用启用了 allErrors 和 ajv-formats 的 Ajv 根据 schema 校验任意 JSON 文档
- 复制生成的 schema 或将其下载为 schema.json
如何使用 JSON Schema 生成器
- 选择「生成」以构建 schema,或选择「校验」以检查文档。
- 在「生成」中粘贴一个 JSON 样本,并切换 required、additionalProperties 和格式选项。
- 选择 draft-07 或 2020-12,然后复制或下载生成的 schema.json。
- 在「校验」中,将一份 JSON Schema 粘贴到左侧,将一份 JSON 文档粘贴到右侧。
- 查看有效/无效徽章以及错误列表,每条错误都带有实例路径。
示例
输入
{
"id": 1,
"name": "Ada",
"email": "ada@example.com",
"tags": ["a", "b"]
}
输出
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" },
"email": { "type": "string", "format": "email" },
"tags": { "type": "array", "items": { "type": "string" } }
},
"required": ["id", "name", "email", "tags"]
}
在开启 required 和格式推断后,该样本生成一份 draft-07 schema。
常见错误与故障排除
- 尽管每个键都存在,生成的 schema 却没有 required 数组。 — 打开「将所有属性标记为 required」;默认情况下生成器只推断类型并将 required 留空,以免过度约束可选字段。
- 校验在检查文档之前就报告「Invalid JSON Schema」。 — schema 窗格本身必须是一个 Ajv 能编译的有效 JSON 对象;请先修正 schema 中的 JSON 语法或未知关键字。
- 一个看起来像日期的值被推断为普通字符串。 — 启用「推断字符串格式」。检测是保守的,只有当样本值匹配 email、date、date-time、uri 或 uuid 的模式时才会添加格式。
- 一份 2020-12 的 schema 被期望 draft-07 的校验器拒绝。 — 将 draft 选择器切换为匹配你的目标。它只改变 $schema URL 以及两个草案之间的次要方言差异。
常见问题
- 生成器使用哪个 JSON Schema 草案?
- 默认使用 draft-07,并提供 2020-12 选项。该选择会设置输出上的 $schema 方言 URL 以及草案之间的次要差异;推断出的结构在其他方面是相同的。
- 生成 schema 时如何决定 required 属性?
- 默认情况下不标记任何属性为 required,因此 schema 接受部分对象。打开「将所有属性标记为 required」可将每个对象的每个键都加入其 required 数组。
- 校验器如何报告错误?
- 它在启用 allErrors 的情况下运行 Ajv,因此你能一次性得到每个失败项。每条错误都会显示 JSON 实例路径(例如 /items/0/id)和一条可读消息,包括缺失的 required 键和意外的额外属性。
- 生成器会推断 email 或 date 等字符串格式吗?
- 会,当开启「推断字符串格式」时。它会用 email、date、date-time、uri 和 uuid 的模式检查样本字符串值并添加匹配的 format 关键字;都不匹配的值保持为普通字符串。
- 它如何为数组推断 schema?
- 它会把所有数组元素的 schema 合并为单个 items schema。混合的对象元素会逐属性合并,任何元素中缺失的键会从 required 中移除,空数组则变成 items:{}。
- 我的 JSON 样本或 schema 会被上传到任何地方吗?
- 不会。生成与校验(包括 Ajv)完全在你的浏览器中运行,因此你粘贴的样本、schema 和文档都在本地处理,留在你的设备上。
相关工具
全部 ArrayKit 工具