Как использовать вложенный JSON в схеме - PullRequest
1 голос
/ 27 мая 2019

Попытка настроить вложенную схему следующим образом.Я хочу быть в состоянии отклонить схему, если bb.c присутствует, когда aa.a присутствует.

Я пробовал без xor

{
  Joi.object().keys({
    aa: Joi.object().keys({
      a: Joi.string(),
      b: Joi.string()
    }).unknown(true).with("a", "b"),
    bb: Joi.object().keys({
      c: Joi.string()
    }).unknown(true)
  }).xor( "aa.a" , ["bb.c"])
}

С приведенным ниже объектом xor завершается ошибкой с ValidationError: «значение» должно содержать хотя бы один из [aa.a, bb.c] все же aa.a существует в предоставленных значениях

{ 
  "aa": {
       "a": "fg",
       "b": "fg"
 },
  "bb": {
        "c": "l"
   }
}

Если я попытаюсь

.without( "aa.a" , ["bb.c"])

, тогда схема пройдет, хотя, на мой взгляд, она не должна проходить, так как без нее должна произойти ошибка, когда bb.c присутствует вместе с aa.a

Это потому, что две вещи вложены в другие объекты, возможно?

Разве мы не можем указать такие глубоко связанные вещи?

Спасибозаранее

1 Ответ

0 голосов
/ 27 мая 2019

Вы можете использовать Joi.when() и создать схему, подобную этой:

Joi.object({
    aa: Joi.object().keys({
        a: Joi.string(),
        b: Joi.string()
    }).unknown(true).with('a', 'b'),
    bb: Joi.object().keys({
        c: Joi.string()
    }).unknown(true)
        .when('aa.a', {
            is: Joi.exist(),
            then: Joi.object({ c: Joi.forbidden() })    
        })
});

По сути, это то, что если присутствует aa.a , то bb.c не допускается, и схема не проходит проверку. С этой схемой ваш пример потерпит неудачу, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...