JSON Schema 校验
JSON Schema Validator
用 JSON Schema 校验文档,每一处失败都带上它在实例里的路径。
用 JSON Schema draft 2020-12 校验一份 JSON 文档,完全在浏览器里。它通过官方 JSON-Schema-Test-Suite 全部 1,299 个必需测试,每一处失败都连同实例位置和产生它的关键字一起报告。
模式(draft 2020-12)
要校验的数据
结果
判定
不通过
失败数
3
| 实例位置 | 关键字 | 问题 |
|---|---|---|
| /port | maximum | 必须小于或等于 65535 |
| /tags | uniqueItems | 第0项和第1项相同 |
| /debug | false | 这里什么值都通不过(模式是 false) |
$ref 只在模式自身、你贴进来的附加文档和随附的 2020-12 元模式里解析——远程引用一律拒绝而不是去抓取,所以结果从不取决于网络。 format 只作为注解报告,不强制执行,这是 2020-12 的默认行为。怎么用
粘贴 schema 和数据
两个框都随你输入重新校验。任何一边的语法错误都单独报告,所以你知道坏的是哪一边。
有 `$ref` 的话加上被引用的文档
打开「附加 schema」并粘贴它们——一份文档或一个数组,每份带自己的 `$id`。什么都不通过网络抓取,所以拆在多个文件里的 schema 在这里仍然能校验。
读失败表
每一行给出实例路径、失败的关键字和它想要什么。要粘进 issue 的话,把整组复制为 JSON。
常见问题
为什么我的 `"format": "email"` 没有强制执行?
因为 2020-12 默认把 `format` 作为注解——校验器允许报告它而不检查它,而大多数校验器正是这么做的。如果你需要强制执行,用 `pattern`,或者一个配置了 format-assertion 词汇表的校验器。
一个远程 `$ref` 解析失败了。
远程引用是被拒绝的,不是被抓取的。一个会连网的校验器给出的结果取决于 DNS 和别人的在线状态,还会告诉那个别人你在校验哪些 schema。把被引用的文档粘进附加 schema 框。
支持哪些 draft?
2020-12。Draft-07 的 schema 常常照样能校验——大多数关键字没变——但 `definitions` 不是 `$defs`,`items` 对元组的含义不同,`$recursiveRef` 没有了。先看 `$schema` 那一行再下结论。
为什么一个字段错了会有这么多错误?
因为 `anyOf`、`oneOf` 或 `allOf` 内部的失败会报告每一个失败的分支——规范就是这么定义一个输出单元的内容的。第一行通常是你要的;其余的解释为什么其他备选也都没匹配上。
可以从这些接进来
YAML 格式化与校验
YAML Formatter & Validator
统一 YAML 缩进并校验语法,把会让解析器崩掉的制表符和锚点错误标出来。
JSON ⇄ YAML 互转
JSON ⇄ YAML
双向转换并保住键的顺序,YAML 一侧可选块状或流式写法。
JSON 转 Zod 校验模式
JSON to Zod Schema
从 JSON 样例构建 Zod schema,自动推断 nullable、optional 和枚举。
JSON Schema 生成
JSON to JSON Schema
从一份或多份样例推断 JSON Schema,把见到的各种形态并起来。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
JSON 格式化与校验
JSON Formatter & Validator
把 JSON 美化成缩进形式或压成一行,校验语法并直接指出出错的行和列。
JSON Schema 生成
JSON to JSON Schema
从一份或多份样例推断 JSON Schema,把见到的各种形态并起来。
OpenAPI 检查
OpenAPI Linter
检查 OpenAPI 文档里缺失的响应、没人用的 schema、指不到东西的引用,以及别的会弄坏代码生成器的毛病。
YAML 格式化与校验
YAML Formatter & Validator
统一 YAML 缩进并校验语法,把会让解析器崩掉的制表符和锚点错误标出来。
JSON ⇄ CSV 互转
JSON ⇄ CSV
把嵌套 JSON 按点路径列名拍平成列,或者从表格重新拼回对象。
JSON 对比
JSON Diff
按结构比较两份 JSON,忽略键的顺序,报出新增、删除和改动的路径。