【Ajv】JSON Schema Validator
大家好,我是小鑫同学。一位从事过 Android 开发、混合开发,现在长期从事前端开发的编程爱好者,我觉得在编程之路上最重要的是知识的分享,所谓三人行必有我师。所以我开始在社区持续输出我所了解到、学习到、工作中遇到的各种编程知识,欢迎有想法、有同感的伙伴加我fe-xiaoxin微信交流~
JSON Schema:
JSON Schema 是一份用来注释和验证 JSON 文档开源草案,通过 JSON Schema 可以描述现有的数据格式,可以完成数据的自动化测试,可以有效保障数据提交的质量。
Ajv 介绍及使用:
在 JavaScript 领域,Ajv 提供了完整的符合 JSON Schema 规范的数据校验。Ajv 的赞助商有 moz://a、Microsoft 等,使用 Ajv 的开源项目也非常多,如:ESLint、webpack 等,并且在 NodeJs、浏览器、桌面应用程序、微信小程序等平台均有应用。
上手使用:
使用步骤说明:
安装、导入、实例化:
定义 schema;
执行 compile 生成 validate 函数;
执行 validate 函数检查数据。
schema 定义说明:
type 设置为 object 表示目标 JSON 文档是一个对象;
properties 设置这个对象的属性包括 foo、bar 并分别指明其类型;
required 通过列表的形式限制 foo 为必填项;
additionalProperties 设置为 false 表示仅能包已声明的属性**。**
常见类型的定义:
定义对象类型:
定义字符串类型:
定义数字类型:
定义布尔类型:
定义数组/类数组类型:
案例代码:
运行下面的代码会同时得到三条违反规则的提示:
fn1:must NOT have additional properties,不需要额外的属性出现。
/foo:must be integer,仅支持整数。
/bar:must be string,仅支持字符串。
Format 关键字:
使用步骤说明:
从 ajv7 开始由 ajv-formats 提供属性的 format 工作。
安装、导入、初始化:
内置的 format 关键字有:date、time、date-time、uri、url、email 等。
format 仅作用于类型为 string 或 number 的属性。
自定义 Format:
使用 addFormat 增加一个通过正则验证完成的 Format:
仅作用在 number 类型上的 Format:
案例代码:
自定义关键字:
自定义关键字可以弥补预定义字段无法完成的验证场景,简化程序结构。 实现 range 关键字:
用“validate”函数定义关键字:
通过 addKeyword 函数新增一个使用 validate 定义的关键字校验,满足在执行ajv.validate
时邮箱的字段长度符合一定的区间。
用"compile"函数定义关键字:
在ajv.compile
阶段会对关键字的类型进行校验,保证关键字的正确使用。
用“宏”函数定义关键字:
通过定义 macro 类型关键字可以很方便的通过一个关键字来为 schema 定义批量增加数据校验。
多语言支持:
使用步骤说明:
安装、导入、初始化:
案例代码:
自定义错误信息:
使用步骤说明:
安装、导入、配置:
i18 库存与 ajv-errors 似乎需要特殊处理;
案例代码:
版权声明: 本文为 InfoQ 作者【小鑫同学】的原创文章。
原文链接:【http://xie.infoq.cn/article/bbb1b8b4a2ca521a74b552ced】。文章转载请联系作者。
评论