Я хочу express условная проверка схемы, которая содержит условия перекрестного ключа. Есть ли поддержка этого в схеме JSON с доступными условными ключевыми словами (allOf / anyOf / if / then / else)
JSON Схема:
{
"type": "object",
"additionalProperties": false,
"properties": {
"x": {
"type": "object",
"additionalProperties": false,
"properties": {
"value": {
"type": "string"
}
}
},
"y": {
"type": "object",
"additionalProperties": false,
"properties": {
"key1": {
"type": "string",
"enum": ["a", "b", "c", "d", "e"]
},
"key2": {
"type": "string",
"enum": ["x", "y", "m", "n", "r", "s"]
}
},
"anyOf": [{
"allOf": [{
"if": {
"properties": {
"key1": {
"enum": ["a", "b"]
}
}
},
"then": {
"properties": {
"key2": {
"enum": ["x", "y"]
}
}
}
},
{
"if": {
"x": {
"properties": {
"value": {
"const": "myVal"
}
}
}
},
"then": {
"properties": {
"key2": {
"enum": ["x", "y"]
}
}
}
}
]
},
{
"if": {
"properties": {
"key1": {
"enum": ["c", "d"]
}
}
},
"then": {
"properties": {
"key2": {
"type": "string",
"enum": ["m", "n"]
}
}
}
}
]
}
}
}
Пример JSON экземпляр будет выглядеть следующим образом
{
"x": {
"value": "myVal"
},
"y": {
"key1": "a",
"key2": "x"
}
}
Условие, которое я хочу express - это следующие 2 условия
Если (x .value == "myVal" AND (y.key1 == "a" ИЛИ y.key1 == "b") , тогда y.key2 должен иметь только "x" или "y"
(ИЛИ)
Если (y.key1 == "c" ИЛИ y.key1 == "d") затем y.key2 должен содержать только «m» или «n».
(ИЛИ)
y.key2 может принимать любые допустимые значения перечисления, определенные в y. свойство key2.
Условное обозначение, которое я использовал JSON, не работает. Я попытался проверить с помощью https://www.jsonschemavalidator.net/.
Любая помощь будет высоко ценится:)
Спасибо