Да, но вам придется написать блок if/then
для каждого типа, который вы хотите поддерживать.
В схеме понимания JSON есть раздел на if/then/else
: http://json -schema.org / creation-json-schema / reference / conditionals.html
Вот выдержка, объясняющая, как работает if/then/else
.
Например, допустим, выхотел написать схему для обработки адресов в США и Канаде.В этих странах существуют разные форматы почтовых индексов, и мы хотим выбрать формат для проверки в зависимости от страны.Если адрес находится в Соединенных Штатах, поле postal_code представляет собой «почтовый индекс»: пять цифр, за которыми следует необязательный четырехзначный суффикс.Если адрес находится в Канаде, поле postal_code представляет собой шестизначную буквенно-цифровую строку, в которой чередуются буквы и цифры.
{
"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]" } }
}
}
Для каждого типа, который вы хотите поддерживать, вам нужно будет написать if/then
объект, и оберните их все в allOf
.