使用ajv-keywords给json schema添加自定义关键字

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);

关键字

  1. typeof

    基于js的typeof实现

  2. instaceof

    基于js的instaceof实现

number

  • range和exclusiveRange

string

  • regexp

    • 支持标准pattern不支持的标志

    • 此关键字仅适用于字符串。如果数据不是字符串,则验证成功

  • formatmaximum、formatminimum、formatexclusivemaximum、formatexclusiveminimum

    校验format:datetime、time、date类型 的范围

  • transform

    Json schema是严格校验的,所以字符串中的空格也会影响校验结果

    transform可以在校验前改变字符串

    • trim: remove whitespace from start and end
    • trimLeft: remove whitespace from start
    • trimRight: remove whitespace from end
    • toLowerCase: case string to all lower case
    • toUpperCase: case string to all upper case
    • toEnumCase: case string to match case in schema

arrays

  • uniqueitemproperties

    对象组成的数组每个值必须是不同的

objects

  • allRequired

    对象中所有的都要满足

  • anyRequired

    对象中只要有一个满足

  • oneRequired

    对象中有且只有一个满足

  • prohibited

    对象中不存在prohibited中指定的属性

  • deepPropperties

    • 校验深层结构中某个属性具体的校验
  • deepRequired

    • 校验数组(对象)深层结构中某个值是必须的

computer keywords

  • switch

    可用if/then/else代替

  • select/selectcases/selectdefault

    select查询某个值,匹配selectcases找那个值,并执行其中校验。匹配不到则校验selectdefault

All types

  • dynamicDefaults

    设置默认值,并且可以扩展自定义函数。类似uuid等

参考

  1. ajv-keywords readme

你可能感兴趣的:(ECMAScript)