У меня есть случай, когда я проверяю требуемые свойства условно.
«не требуется» не работает должным образом.
Если «профиль» как профиль1, тогда поля «скорость», «трюк» и «тег» обязательны для заполнения, а «код», «имя» 'и' type 'не должны присутствовать.
Если' profile 'в качестве profile2, то' code 'требуется, а' rate ',' tag 'и' trick 'не требуются.
если «профиль» - это профиль3, тогда «скорость», «тег», «трюк», «код», «имя» и «тип» не требуются.
Я использую черновую версию схемы версии 4
Схема
{
"type": "object",
"properties": {
"id": { "type": "integer" },
"url": { "type": "string" },
"profile": { "type": "string" },
"rate": { "type": "string" },
"trick": { "type": "boolean" },
"tag": { "type": "string" },
"type": { "type": "string" },
"name": { "type": "string" },
"code": { "type": "string" }
},
"additionalProperties": false,
"required": [ "url", "profile" ],
"oneOf": [
{
"properties": { "profile": { "enum": [ "profile1" ] } },
"not": { "required": ["type", "name", "code"] }
},
{
"properties": { "profile": { "enum": [ "profile2" ] } },
"allOf": [
{ "required": [ "code" ] },
{ "not": { "required": ["rate", "tag", "trick"] } }
]
},
{
"properties": { "profile": { "enum": ["profile3"] } },
"not": { "required": ["rate", "trick", "tag", "type", "name", "code"] }
}
]
}
Допустимые входы
{
"id": 1,
"url": "url",
"profile": "profile2",
"type": "",
"name": "",
"code": ""
}
{
"id": 1,
"url": "url",
"profile": "profile3"
}
{
"id": 1,
"url": "url",
"profile": "profile1",
"rate": "",
"trick": false,
"tag": ""
}
Недопустимые входы
{
"url": "url",
"profile": "profile3",
"code": ""
}