← 中文资源

简体中文版本

从零构建 JSON Schema 校验器

无依赖的 draft-07 子集校验器:类型、组合子、条件与本地 $ref,错误以 JSON Pointer 路径精确定位。

阅读英文原文

目标

实现有意义的 draft-07 子集校验器:type/enum/const、数值与字符串约束、对象属性与 required、数组 items 与 uniqueItems、allOf/anyOf/oneOf/not、if-then-else、本地 $ref 带环检测,错误报告实例路径加 schema 路径。

要点

编译为闭包树:regex 预编译、子校验器直引用,千次校验零重复解释;oneOf 数“空错误列表”的分支数,失败把各分支错误聚合进父错误让用户看到最接近的分支;$ref 惰性编译加栈守卫,递归树模式可任意深度而真环报命名错误;官方测试套件在 CI 里当永久裁判。

提示

错误路径就是产品:required 一次报全部缺失键、数组元素路径追加 /0 形式索引。

验证

每个测试断言精确的 instancePath 字符串;套件测试度量实现子集的通过率并白名单有意未实现项。 项目目录骨架:

jsonschema/
├── src/
│   ├── index.js
│   ├── compile.js
│   ├── keywords/
│   │   ├── types.js
│   │   ├── numeric.js
│   │   ├── strings.js
│   │   ├── objects.js
│   │   └── arrays.js
│   └── refs.js
├── test/
│   ├── keywords.test.js
│   └── suite.test.js
└── package.json

实施阶段:Core types and scalars → Objects and arrays → Combinators and conditionals → Local $ref and cycle safety。