跳到正文

JSON Schema 校验

JSON Schema Validator

用 JSON Schema 校验文档,每一处失败都带上它在实例里的路径。

用 JSON Schema draft 2020-12 校验一份 JSON 文档,完全在浏览器里。它通过官方 JSON-Schema-Test-Suite 全部 1,299 个必需测试,每一处失败都连同实例位置和产生它的关键字一起报告。

🔒 完全在你的浏览器里运行json-schemavalidatejson

模式(draft 2020-12)

要校验的数据

结果

判定

不通过

失败数

3

实例位置关键字问题
/portmaximum必须小于或等于 65535
/tagsuniqueItems第0项和第1项相同
/debugfalse这里什么值都通不过(模式是 false)
校验全部在这个标签页里按 JSON Schema draft 2020-12 进行,并通过官方 JSON-Schema-Test-Suite 的全部 1,299 项必需测试。 $ref 只在模式自身、你贴进来的附加文档和随附的 2020-12 元模式里解析——远程引用一律拒绝而不是去抓取,所以结果从不取决于网络。 format 只作为注解报告,不强制执行,这是 2020-12 的默认行为。

怎么用

  1. 粘贴 schema 和数据

    两个框都随你输入重新校验。任何一边的语法错误都单独报告,所以你知道坏的是哪一边。

  2. 有 `$ref` 的话加上被引用的文档

    打开「附加 schema」并粘贴它们——一份文档或一个数组,每份带自己的 `$id`。什么都不通过网络抓取,所以拆在多个文件里的 schema 在这里仍然能校验。

  3. 读失败表

    每一行给出实例路径、失败的关键字和它想要什么。要粘进 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` 内部的失败会报告每一个失败的分支——规范就是这么定义一个输出单元的内容的。第一行通常是你要的;其余的解释为什么其他备选也都没匹配上。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。