Зависимость схемы JSON между свойствами в отдельных объектах

Создание схемы для следующего документа:

{
    "name": "billy",
    "foo": {
        "this": "something"
    },
    "bar": {
        "that": "something"
    }
}

Я хочу, чтобы схема требовала $.bar.that, если $.foo.this присутствует.

  • Пробовал зависимость от этого с указателем JSON на это.
  • Пробовал блок if/then, но не смог понять, как сказать «this присутствует» в части if блока.
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
0
220
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

dependencies работает только с текущим объектом, поэтому это нужно делать с if/then. Вам нужно использовать properties, чтобы установить required на каждом уровне.

{
  "if": {
    "properties": {
      "foo": { "required": ["this"] }
    },
    "required": ["foo"]
  },
  "then": {
    "properties": {
      "bar": { "required": ["this"] }
    },
    "required": ["bar"]
  }
}

Закрыть входную дверь! Это сработало. Руководство по dependencies я получаю. Использование required в блоке then имеет смысл. Использование required в блоке if? Я бы потратил оставшиеся годы своей жизни, пытаясь понять это, но безрезультатно. Знаете ли вы, что стоит за этим синтаксисом?

Adam 24.12.2020 05:48
if такая же схема, как и любая другая. Если схема if прошла успешную проверку, то схема then также должна пройти проверку. Если схема утверждает, что /foo и /foo/this требуются, экземпляр может быть действительным для этой схемы только в том случае, если /foo/this присутствует в экземпляре.
Jason Desrosiers 26.12.2020 18:26

Бит схемы имеет смысл. Что мне не интуитивно понятно, так это бит required. required (для меня) означает, что он должен присутствовать. Однако настоящее не является синонимом проверенного. Очевидно, что в качестве предиката в операторе if это так.

Adam 27.12.2020 03:50

Другие вопросы по теме