Ajv JSON模式验证器
Node.js和浏览器中最快的JSON验证器。
支持JSON Schema草案04/06/07/2019-09/2020-12(支持草案04需要ajv-draft-04包)和JSON类型定义RFC8927。
Ajv赞助商
贡献
超过100人为Ajv做出了贡献,我们很乐意让您加入开发。我们欢迎实施能惠及众多用户的新功能,以及改进我们文档的想法。
文档
所有文档都可在Ajv网站上找到。
一些有用的网站链接:
请赞助Ajv开发
自从我请求支持Ajv开发以来,40人和6个组织通过GitHub和OpenCollective做出了贡献 - 这些支持帮助获得了MOSS补助金!
您的持续支持非常重要 - 一旦下一个主要版本发布,这些资金将用于开发和维护Ajv。
请通过以下方式赞助Ajv:
- GitHub赞助页面(GitHub将匹配捐款)
- Ajv Open Collective
谢谢。
Open Collective赞助商
性能
Ajv生成代码将JSON模式转换为超快速的验证函数,这些函数对v8优化非常高效。
目前,根据以下基准测试,Ajv是最快和最符合标准的验证器:
- json-schema-benchmark - 比第二名快50%
- jsck benchmark - 快20-190%
- z-schema benchmark
- themis benchmark
json-schema-benchmark的不同验证器性能:
特性
- Ajv 实现了 JSON Schema 草案-06/07/2019-09/2020-12 标准(草案-04 在 v6 中支持):
- 所有验证关键字(参见 JSON Schema 验证关键字)
- OpenAPI 扩展:
- 新增:关键字 discriminator。
- 关键字 nullable。
- 完全支持远程引用(远程模式必须通过
addSchema
添加或编译才能使用) - 支持模式之间的递归引用
- 正确计算包含 Unicode 对的字符串长度
- JSON Schema 格式(使用 ajv-formats 插件)。
- 根据元模式验证模式
- 新增:支持 JSON 类型定义:
- 所有关键字(参见 JSON 类型定义模式形式)
- JTD 模式的元模式
- "union" 关键字和用户定义关键字(可在模式的 "metadata" 成员内使用)
- 支持 浏览器 和 Node.js 10.x 及以上版本
- 编译过程中异步加载引用的模式
- 使用 option allErrors 的"所有错误"验证模式
- 带参数的错误消息描述错误原因,便于生成错误消息
- 使用 ajv-i18n 包支持 i18n 错误消息
- 移除额外属性
- 为缺失的属性和项目分配默认值
- 将数据强制转换为
type
关键字指定的类型 - 用户定义关键字
- 使用 ajv-keywords 包的额外扩展关键字
- $data 引用用于将验证数据中的值作为模式关键字的值
- 异步验证用户定义的格式和关键字
安装
安装版本 8:
npm install ajv
入门
在 Node.js REPL 中尝试:https://runkit.com/npm/ajv
JavaScript 中:
// 或 ESM/TypeScript 导入
import Ajv from "ajv"
// Node.js require:
const Ajv = require("ajv")
const ajv = new Ajv() // 可传入选项,如 {allErrors: true}
const schema = {
type: "object",
properties: {
foo: {type: "integer"},
bar: {type: "string"},
},
required: ["foo"],
additionalProperties: false,
}
const data = {
foo: 1,
bar: "abc",
}
const validate = ajv.compile(schema)
const valid = validate(data)
if (!valid) console.log(validate.errors)
了解如何使用 Ajv 并查看更多示例,请参阅 指南:入门
更新历史
参见 https://github.com/ajv-validator/ajv/releases
请注意:版本 8.0.0 的变更
行为准则
请查看并遵守 行为准则。
如遇任何不可接受的行为,请报告至 ajv.validator@gmail.com - 项目团队将进行审查。
安全联系
要报告安全漏洞,请使用 Tidelift 安全联系方式。 Tidelift 将协调修复和披露。请不要通过 GitHub issues 报告安全漏洞。
开源软件支持
Ajv 是 Tidelift 订阅 的一部分 - 它为开源软件用户提供集中支持,作为软件维护者提供支持的补充。