JSON Schema 入门:像校验 SQL 一样校验你的 JSON 数据结构

2024-04-13

语法合法的 JSON 仍可能是「字段错了」的 JSON。JSON Schema 用一份声明描述允许的结构,运行时或 CI 里对照校验——类似数据库约束,但针对 JSON 文档。

最小 Schema 示例

根类型通常是 object 或 array;用 properties 列字段,required 列必填。

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["id", "name"],
  "properties": {
    "id": { "type": "integer" },
    "name": { "type": "string", "minLength": 1 }
  }
}

常见关键字

type、enum、const 约束取值;items 描述数组元素;additionalProperties: false 禁止多余字段。

oneOf / anyOf 表达联合类型;$ref 引用可复用子 Schema。

在代码里怎么用

JavaScript:ajv 编译 Schema 后 validate(data);失败时返回 errors 路径与原因。

Python:jsonschema 库;Go:gojsonschema。OpenAPI 3 的请求/响应体就是 JSON Schema 的子集。

与语法校验的关系

顺序:JSON.parse 通过 → 再 schema 校验。Syntax error 与 schema violation 分开报错,联调更省时间。

团队落地

把 Schema 放进仓库,CI 对 fixture 样例跑 validate;API 变更先改 Schema 再改实现。

可从样例 JSON 生成初版 Schema,再人工收紧规则。