У меня есть схема JSON (v7.0), в которой мне нужно убедиться, что точно перечисленные свойства присутствуют в окончательной formData.
В большинстве случаев это можно решить с помощью "additionalProperties": false
и "minProperties": X
, где X представляет #properties в объекте (любезно предоставлено это решение)
Однако в некоторых случаях количество свойств варьируется.
Так обстоит дело в приведенном ниже примере, где выбор «Обновление вручную» (перечисление 2) в «синхронизации» может привести к добавлению поля «manual_date». Если для параметра «синхронизация» установлено значение «Обновление вручную», свойство «manual_date» должно быть обязательным, но в противном случае оно не требуется.
Я попытался реализовать это с помощью оператора «required» в зависимостях, но я считаю, что это неправильно, так как при тестировании через валидатор.
Короче говоря: я ищу правильный способ сделать поля, зависящие от перечисления, обязательными в моей схеме JSON.
Моя схема:
{
"type": "object",
"properties": {
"rtc": {
"title": "REAL-TIME-CLOCK (RTC)",
"type": "object",
"properties": {
"sync": {
"title": "Time synchronization method",
"type": "integer",
"default": 1,
"anyOf": [
{
"type": "integer",
"title": "Retain current time",
"enum": [
1
]
},
{
"type": "integer",
"title": "Manual update",
"enum": [
2
]
},
{
"type": "integer",
"title": "Automatic update (requires WiFi)",
"enum": [
3
]
}
]
},
"timezone": {
"title": "Time zone (UTC−12 to UTC+14)",
"type": "number",
"default": 0,
"minimum": -12,
"maximum": 14
},
"adjustment": {
"title": "Adjustment (-129600 to 129600 seconds)",
"type": "number",
"default": 0,
"minimum": -129600,
"maximum": 129600
}
},
"dependencies": {
"sync": {
"oneOf": [
{
"properties": {
"sync": {
"enum": [
1
]
}
}
},
{
"properties": {
"sync": {
"enum": [
2
]
},
"manual_date": {
"title": "Time (UTC) ",
"type": "string",
"format": "date-time"
}
},
"required": [
"manual_date"
]
},
{
"properties": {
"sync": {
"enum": [
3
]
}
}
}
]
}
},
"additionalProperties": false,
"patternProperties": {
"manual_date": {}
},
"minProperties": 3
}
}
}