{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"active": {
"type": "boolean"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"profile": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"city": {
"type": "string"
}
},
"required": [
"age",
"city"
]
}
},
"required": [
"id",
"name",
"active",
"tags",
"profile"
]
}关于 JSON 转 JSON Schema
JSON 转 JSON Schema 工具根据一段示例 JSON 自动推断字段类型、是否必填与嵌套结构,生成符合 Draft-07 或 2020-12 规范的 JSON Schema。它能显著降低手写 Schema 的成本,帮助你为接口请求体、配置文件或数据管道快速建立校验规则。推断结果可在右侧编辑微调,并复制粘贴到代码或表单校验库中。解析完全在浏览器本地进行,示例数据不会上传,适合处理含有业务字段定义的敏感样例。生成的 Schema 同时可作为文档,让前后端对数据结构达成共识,也便于接入 Ajv 等校验库做运行时数据质量把关。对于接口文档自动化,导出的 Schema 还能直接挂到 OpenAPI 里作为请求体定义复用;它既可作为运行时校验规则接入 Ajv 等库,也能当作前后端对数据结构的书面约定,减少因字段类型不一致导致的联调返工与潜在的线上数据质量问题。
使用方法
- 打开「JSON 转 JSON Schema」
- 选择源格式与目标格式
- 根据需要调整输出选项
- 点击「转换」按钮,结果实时显示
- 复制或导出结果
使用场景
- 接口契约校验 — 为 API 请求/响应生成 schema,用于运行时校验,拦截不合法的数据。
- 表单与配置校验 — 把配置样例转成 schema,配合 ajv 等库校验用户输入或配置文件。
- 生成 OpenAPI 片段 — 快速得到 schema 作为 OpenAPI/Swagger 文档中 components 的基础。
- 数据质量门禁 — 在数据管道中用 schema 做入口校验,保证下游消费的数据结构稳定。
- 团队结构对齐 — 用 schema 作为前后端共享的结构契约,减少沟通成本。
常见问题
生成的是哪个版本的 schema?
默认输出 JSON Schema Draft-07,兼容 ajv 等主流校验库。复制后可按需改成其它草案版本。
所有字段都会被标记 required 吗?
可以通过「标记 required」开关控制。开启时样例中出现的字段都会列入 required;如有可选字段,关闭后再手动调整更合适。
数组里类型不一致怎么处理?
当数组元素类型不同,工具会用 anyOf 列出各种可能的子 schema,尽量贴合真实数据。
整数和小数会区分吗?
会。整数推断为 integer,带小数的数字推断为 number,便于更精确的校验。
可以校验我的 JSON 吗?
本工具负责生成 schema。生成后你可以用 ajv、jsonschema 等库,或在线校验器对真实数据进行校验。
生成的 schema 太宽松、可接受太多值怎么办?
因为工具只从样例反推,样例里出现过 null 会把字段加成 anyOf 并含 null,空对象 {} 只能推断成 { } 等于什么都能装,样例越精简 schema 就越宽松。想收紧,可在右侧编辑器把 anyOf 里多余的 null 或类型分支删掉,给空对象补上 properties 和 required,并按业务加上 pattern 正则、minimum/maximum、maxLength 等约束,再拿真实样例跑一遍校验,看仍能通过哪些不该通过的值,逐步收敛到只放行实际业务允许的取值。
怎么给字段加枚举和 uniqueItems 这类约束?
生成后在右侧编辑器直接改对应字段的 schema 对象:给字符串加 pattern 或 minLength,给数字加 minimum/maximum,固定取值集合加 enum 数组,数组内容不重复加 uniqueItems:true。改完可复制进 ajv 等校验库,用一段真实数组各跑一遍,确认约束行为符合预期。约束越具体,运行时能拦下的脏数据越多,生成的 schema 也能当作接口契约与协作文档使用,减少联调阶段的类型不一致问题。