Я использую AJV
, пытаясь проверить некоторые данные и динамически запрашивать свойства на основе значения другого свойства.
То, что я пытаюсь проверить, это: - enabled
всегда требуется, - если enabled
= true
, то должно быть предоставлено только одно из других свойств (realtime
, threshold
или digest
),
Примеры полезной нагрузки и ожидаемые результаты:
Должен пройти
{
"notifications": {
"enabled": false
}
}
Должен пройти
{
"notifications": {
"enabled": true,
"realtime": true
}
}
Должен пройти
{
"notifications": {
"enabled": true,
"digest": true
}
}
Должен пройти
{
"notifications": {
"enabled": true,
"threshold": {}
}
}
Должен завершиться ошибкой, поскольку enabled
= true
, но никакое другое свойство не установлено.
{
"notifications": {
"enabled": true
}
}
Должен завершиться ошибкой, поскольку enabled
= true
и установлено более одного другого свойства.
{
"notifications": {
"enabled": true,
"threshold": {},
"digest: true
}
}
Вот схема проверки, которую я использую:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Settings",
"type": "object",
"properties": {
"notifications": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"realtime": {
"type": "boolean"
},
"threshold": {
"type": "object",
"properties": {
"detections": {
"type": "number"
},
"elapsed": {
"type": "number"
}
},
"required": ["detections", "elapsed"]
},
"digest": {
"type": "boolean"
}
},
"required": ["enabled"],
"if": {
"properties": { "enabled": true }
},
"then": {
"oneOf": [
{ "required": [ "realtime" ] },
{ "required": [ "threshold" ] },
{ "required": [ "digest" ] }
]
}
}
}
}
Благодарю вас!