Joi 验证 ||在一个对象数组中,至少一个对象应该包含一个键的特定值

问题描述

我需要以下对象数组的架构:

option = [
    {
        answer: '',isTrue: false
    },{
        answer: '',isTrue: true
    },]

到目前为止,我写了以下架构:

Joi.array().items(Joi.object({
   answer: Joi.string().required(),isTrue: Joi.boolean().required()
}).unkNown()).min(2).required()

问题:我需要验证至少一个对象的“isTrue”键值为“true”(布尔值)

解决方法

 let optionsValidation = Joi.object().keys({
      answer: Joi.string().required(),isTrue: Joi.boolean().required()
    });
    
    //replace with your field name
    options: Joi.array()
          .items(optionsValidation)
          .has(
            Joi.object().keys({
              answer: Joi.string().required(),isTrue: Joi.boolean().invalid(false).required();
            }),)

也许您需要更改 smth 以适应您的代码,但这应该可行。它确保数组上至少有一个对象应该有一个答案并且它应该是真的。