编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 格式化 / JSON Schema生成

JSON Schema生成

样例JSON一键生成draft-07校验Schema

输入样例 JSON
JSON Schema (draft-07)

这个工具能做什么

JSON Schema 是一套用 JSON 本身来描述 JSON 数据结构的规范,常用于约束接口的请求体、响应体或配置文件格式。手写 Schema 很费时——你得逐个字段声明 type、把对象的字段塞进 properties、再列出 required 必填项,字段一多就容易漏写或写错。这个工具做的是反向的事:把一段真实的样例 JSON 粘进来,它替你推断出一份对应的 draft-07 Schema,省去从零敲模板的过程。它适合那种手上已经有数据、只想快速拿到一份可用 json 校验规则的场景,是最直接的 json 转 schema 方式。

工具在浏览器里把样例 JSON 解析成对象树,再递归遍历每个节点来推断结构。遇到字符串、数字、布尔、null 就直接映射成对应的 type;遇到对象就进入 properties,把每个键继续往下递归,并把当前对象里出现过的键全部登记进 required;遇到数组则取第一个元素作为样本,推断出 items 的结构。因为是递归下降的方式,多层嵌套的对象套数组、数组套对象都能一层层展开,最终拼成带缩进、方便阅读的 Schema 文本。整个过程是纯结构推断,只关心类型与层级,不涉及取值范围、正则这类语义约束。

最常见的用法是给后端接口补校验。比如你手上有一份订单接口返回的 JSON,想在网关或参数校验中间件里加一道格式检查,就把返回样例贴进来生成 Schema,再接到 ajv、python-jsonschema 之类的校验库里跑,接口一旦返回结构变形就能被拦下。另一个场景是写接口文档:OpenAPI/Swagger 里的 schema 段落本质就是 JSON Schema,用这个 schema 生成器先出一份骨架、再手动微调,比纯手写快很多。对前端来说,也能拿它给表单提交数据或本地存储的结构做一层运行时校验。

有几个边界值得留意。数组只按第一个元素推断 items,如果数组里元素结构不一致(比如混了不同形状的对象),生成结果只反映第一个,需要手动补 oneOf 或 anyOf。required 会把样例中出现过的键全列上,但出现过不等于业务上必填,可选字段要自己从 required 里删掉。此外工具只做类型层面的推断,像字符串的 format、数值的 minimum/maximum、枚举 enum 这类约束不会凭空猜出来,得按业务规则自行补充;null 值也只能推断成 null 类型,若该字段实际可空又可为字符串,需手动改成多类型。所有解析都在本地完成、不上传,贴敏感数据也不必担心。

JSON Schema生成是一个免费的在线工具,打开网页就能用,不用下载也不用注册。平时大家搜的“json schema生成”、“json转schema”、“json模式生成”,说的都是这个。

常见使用场景

使用方法

  1. 把内容粘贴到输入框(生成类工具直接设置选项)。
  2. 按需要选择选项,点操作按钮。
  3. 结果出现在下方,点「复制结果」即可带走。

常见问题

生成的是哪个版本的 JSON Schema?draft-07 兼容主流校验库吗?
生成的是 draft-07 草案,也是目前工具链支持最广的版本,ajv、python-jsonschema、everit-json-schema 等主流库都原生兼容。如果需要 2019-09 或 2020-12,可在结果基础上改掉 $schema 声明并调整少量关键字。
数组里有多个结构不同的元素会怎么处理?
工具只取数组的第一个元素来推断 items,后面的元素不参与推断。若数组元素结构不统一,需要自己把 items 改成 oneOf/anyOf,或补上缺失的字段。
为什么所有字段都被放进了 required?
工具默认把样例里出现过的键都当作必填登记进 required,它无法判断哪些字段业务上可选。把实际可选的字段从 required 数组里手动删掉即可。
生成的 Schema 能直接拿去校验数据吗?
可以,直接喂给 ajv、python-jsonschema 等 draft-07 校验库就能用。但它只覆盖类型和层级结构,format、取值范围、正则等业务约束需要你自己补上。
粘进来的样例 JSON 会被上传到服务器吗?
不会。JSON 的解析和 Schema 生成都在浏览器本地完成,样例数据不离开你的电脑,贴内部接口或敏感数据也不用担心外泄。

相关工具

查看全部「格式化」工具 →

相关名词解释