Я не совсем уверен, но я думаю, что вы спрашиваете, если присутствует iban
или bic
, тогда должен присутствовать и другой.
У вас были правильные идеи здесь . Однако это осложняется тем фактом, что ваши значения могут быть нулевыми, а не просто отсутствовать.
dependencies
проверяет только наличие свойств, а не их значение. null
по-прежнему является значением. dependencies
не может помочь вам в вашей ситуации, поскольку вы всегда ожидаете, что ключи присутствуют в объекте.
Сначала давайте посмотрим на решение.
{
"anyOf": [
{
"properties": {
"bic": { "type": "string" },
"iban": { "type": "string" },
"account_number": { "enum": [null]}
},
"required": [
"iban",
"bic"
]
},
{
"required": [
"account_number"
],
"properties": {
"bic": { "enum": [null] },
"iban": { "enum": [null] },
"account_number": { "type": "string" }
}
}
]
}
https://jsonschema.dev/s/dg0CY
Причина, по которой вам нужно такое дублирование, заключается в том, что вам нужно полностью express условие, которое вы проверяете.
Значения массива anyOf
являются подсхемами. Значения представляют собой полные схемы сами по себе.
Принятие ваших значений для anyOf
, anyOf[0]
делает express ограничение, которое вы ищете, однако anyOf[1]
ничего не говорит о iban
или bic
, и поэтому "любая из" схем считается допустимой. Каждое значение в anyOf
не знает о содержании другого; объединяются только результаты.
JSON Схема основана на ограничениях, поэтому разрешено все, что НЕ выражено.
В решении, которое я предоставил выше, каждая схема в anyOf
проверяет полностью для требуемого условия.
Для вашего примера он работает в draft-07 так же, как draft-04, поэтому демонстрация такая же.