Создание схемы для следующего документа:
{
"name": "billy",
"foo": {
"this": "something"
},
"bar": {
"that": "something"
}
}
Я хочу, чтобы схема требовала $.bar.that
, если $.foo.this
присутствует.
this
присутствует» в части if блока.dependencies
работает только с текущим объектом, поэтому это нужно делать с if
/then
. Вам нужно использовать properties
, чтобы установить required
на каждом уровне.
{
"if": {
"properties": {
"foo": { "required": ["this"] }
},
"required": ["foo"]
},
"then": {
"properties": {
"bar": { "required": ["this"] }
},
"required": ["bar"]
}
}
if
такая же схема, как и любая другая. Если схема if
прошла успешную проверку, то схема then
также должна пройти проверку. Если схема утверждает, что /foo
и /foo/this
требуются, экземпляр может быть действительным для этой схемы только в том случае, если /foo/this
присутствует в экземпляре.
Бит схемы имеет смысл. Что мне не интуитивно понятно, так это бит required
. required
(для меня) означает, что он должен присутствовать. Однако настоящее не является синонимом проверенного. Очевидно, что в качестве предиката в операторе if это так.
Закрыть входную дверь! Это сработало. Руководство по
dependencies
я получаю. Использование required в блокеthen
имеет смысл. Использованиеrequired
в блокеif
? Я бы потратил оставшиеся годы своей жизни, пытаясь понять это, но безрезультатно. Знаете ли вы, что стоит за этим синтаксисом?