Все ключевые слова, в том числе if
/ then
/ else
, могут появляться во всем, что является схемой .Значение ключевого слова properties
определяется как объект , значения которого являются схемами.Поэтому ключевые слова нельзя использовать в качестве дочернего элемента properties
, но их можно использовать в одном из его значений.
Если вы сделаете что-то подобное ...
{
"type": "object",
"properties": {
"street_address": { "type": "string" },
"country": { "enum": ["United States of America", "Canada"] },
"if": {
"properties": { "country": { "const": "United States of America" } }
},
"then": {
"properties": { "postal_code": { "pattern": "[0-9]{5}(-[0-9]{4})?" } }
},
"else": {
"properties": { "postal_code": { "pattern": "[A-Z][0-9][A-Z] [0-9][A-Z][0-9]" } }
}
}
}
itописывает объект как ...
{
"street_address": "123 Fake St",
"country": "United States of America",
"if": { "country": "United States of America" },
"then": { "postal_code": "90000" },
"else": { "postal_code": "A0A 0A0" }
}
Обратите внимание, что «если», «тогда», «еще» понимаются как имена свойств, а не как ключевые слова.Опять же, это потому, что значение properties
не является схемой, это объект, значения которого являются схемами.Эта схема оказывается действительной схемой, она просто не делает того, чего вы ожидаете.
Поэтому вы можете сделать что-то вроде этого ...
{
"type": "object",
"properties": {
"street_address": { "type": "string" },
"country": { "enum": ["United States of America", "Canada"] },
"postal_code": {
"if": { ... },
"then": { ... },
"else": { ... }
}
}
}
В этом случае, он распознает if
/ then
/ else
в качестве ключевых слов, но не существует способа написать это условие для выполнения того, что вы пытаетесь сделать.Вы должны поместить его на верхний уровень, как это сделали примеры, которые вы видели.