首页 > 工具箱 > JSON Schema 校验

JSON Schema 校验与推断

JSON Schema 是用 JSON 写的「这份 JSON 应该长什么样」。接口契约、配置文件校验、表单规则都在用它。这里两件事都能做:拿 Schema 校验数据,错在哪一层、为什么错,逐条列出来;或者反过来,丢一份样例 JSON 进去,先生成一份 Schema 骨架再手工收紧。

支持的关键字

关键字说明
typeobject / array / string / number / integer / boolean / null,也可以写成数组表示「几种之一」
properties对象各字段的子 Schema
required必须存在的字段名列表
additionalPropertiesfalse 时,出现 properties 之外的字段就算错
items数组元素的 Schema;写成数组则按位置一一对应
minItems / maxItems / uniqueItems数组长度与元素唯一性
minimum / maximum数值范围,配套的 exclusiveMinimum / exclusiveMaximum 也支持
multipleOf必须是某个数的整数倍
minLength / maxLength / pattern字符串长度与正则
formatemail / uri / ipv4 / ipv6 / date / date-time / uuid / hostname
enum / const取值必须在列表里 / 必须等于某个固定值
anyOf / oneOf / allOf / not组合条件
$ref只支持指向本文档内部的 #/definitions/xxx 这类引用,不会去网上拉

按 draft-07 的语义实现,覆盖日常够用的那一批。$idif/then/else、跨文档 $refcontentEncoding 这些不支持,真要跑完整规范请用 Ajv 之类的库。

推断出来的 Schema 怎么用

它是起点,不是终点
推断只能看见样例里出现过的东西。样例里 status 永远是 "ok",推断不出它还能是 "fail";样例里数组只有一个元素,也推断不出第二个元素可能缺字段。生成完一定要手工过一遍,把范围、必填、枚举收紧。
多丢几份样例进去
把几份代表性的响应(成功、失败、空列表、字段缺失)分别推断一次,再把结果并起来,比只看一份准得多。
null 是个坑
样例里某字段是 null,推断出的 type 就只有 "null"。实际多半应该是 ["string","null"],需要手工改。
相关工具
JSON 格式化JSONPath 测试JSON 结构处理JSON 转代码测试数据生成
已复制