JavaScript编写JSON Schema如何定义布尔或null类型的OR校验规则
JSON Schema 多类型OR逻辑正确写法
两种错误写法的问题
- 重复声明同名字段:JavaScript对象中同名属性会以后面的声明为准,第一种写法最终
default_show的规则只有type: null,传入布尔值自然会触发校验失败。 - 使用
||拼接类型:JS中'boolean' || null会直接返回第一个真值'boolean',等价于只配置了布尔类型;同时JSON Schema本身的语法规则也不支持用JS逻辑运算符拼接类型值。
正确实现方案
JSON Schema 原生支持通过给type字段传入类型数组的方式,实现单字段允许多种类型的OR校验逻辑,注意null类型对应的规则值为字符串'null',不是JS原生的null值。
修正后的Schema代码如下:
const CheckSchema = { title: 'Check Schema', type: 'object', required: ['id', 'name', 'description', 'wanted'], properties: { id: { type: 'integer' }, // 按实际业务补全其余必填字段的类型规则 name: { type: 'string' }, description: { type: 'string' }, wanted: { type: 'string' }, default_show: { type: ['boolean', 'null'] // 数组内列出所有允许的类型即可 } } };
补充说明:该写法符合JSON Schema draft-6及以上版本规范,Ajv等主流校验库均原生支持,配置完成后传入布尔值
true/false或null均可通过校验,传入字符串、数字、对象等其他类型时会正常触发校验错误,可直接配合Mocha+Chai的单元测试用例使用。
内容的提问来源于stack exchange,提问作者Wajih Haider
相关产品推荐
相关产品推荐

