JSON Schema的关键字太少,有些默认的校验无法满足效果,需要自定义校验关键字,ajv-errors提供一些常见的validator关键字
用法 var Ajv = require('ajv');var ajv = new Ajv({$data:true});//添加所有的关键字require('ajv-keywords')(ajv);//只添加instanceof关键字require('ajv-keywords')(ajv, 'instanceof');//添加多个关键字require('ajv-keywords')(ajv, ['typeof', 'instanceof']);//只添加instanceof关键字,其他代码不添加(类似按需加载)require('ajv-keywords/keywords/instanceof')(ajv); 关键字typeof
基于js的typeof实现
instaceof
基于js的instaceof实现
number range和exclusiveRange stringregexp
支持标准pattern不支持的标志
此关键字仅适用于字符串。如果数据不是字符串,则验证成功
formatmaximum、formatminimum、formatexclusivemaximum、formatexclusiveminimum
校验format:datetime、time、date类型 的范围
transform
Json schema是严格校验的,所以字符串中的空格也会影响校验结果
transform可以在校验前改变字符串
trim: remove whitespace from start and endtrimLeft: remove whitespace from starttrimRight: remove whitespace from endtoLowerCase: case string to all lower casetoUpperCase: case string to all upper casetoEnumCase: case string to match case in schema arraysuniqueitemproperties
对象组成的数组每个值必须是不同的
objectsallRequired
对象中所有的都要满足
anyRequired
对象中只要有一个满足
oneRequired
对象中有且只有一个满足
prohibited
对象中不存在prohibited中指定的属性
deepPropperties
校验深层结构中某个属性具体的校验deepRequired
校验数组(对象)深层结构中某个值是必须的 computer keywordsswitch
可用if/then/else代替
select/selectcases/selectdefault
select查询某个值,匹配selectcases找那个值,并执行其中校验。匹配不到则校验selectdefault
All typesdynamicDefaults
设置默认值,并且可以扩展自定义函数。类似uuid等
参考 ajv-keywords readme