可以使用Ajv的validate函数和if-then-else语句解决这个问题。假设我们有一个“user”对象,其中包含两个属性“name”和“address”,我们需要根据“address”属性是否存在来确定“name”属性是否可为空。下面是解决方法的代码示例:
const Ajv = require('ajv');
const ajv = new Ajv();
ajv.addKeyword('nullable', {
validate: function(schema, data) {
if (schema && schema === true) {
return data === null || data === undefined;
}
return true;
}
});
const schema = {
type: 'object',
properties: {
name: {
nullable: {
if: {
properties: { address: { const: null } },
required: ['address']
},
then: true,
else: false
},
type: 'string'
},
address: {
nullable: true,
type: 'string'
}
}
};
const validate = ajv.compile(schema);
console.log(validate({ name: 'John', address: null })); // true
console.log(validate({ name: 'John', address: '123 Main St.' })); // false
console.log(validate({ name: null, address: null })); // false
console.log(validate({ address: '123 Main St.' })); // true
在这个示例中,我们使用“Ajv.addKeyword”函数创建了一个新的“nullable”关键字。在这个关键字的“validate”函数中,我们检查架构中是否存在“nullable”属性,如果存在则检查数据是否为null或undefined。接下来,在架构中的“name”和“address”属性中使用“nullable”关键字,以根据“address”属性是否存在确定“name”属性是否可为空。在这个例子中,“name”属性的“nullable”关键字使用了if-then-else语句,根据“address”属性是否为null来