У меня есть представление JSON, которое я пытаюсь проверить на основе ряда правил, определенных в шаблоне. Этот шаблон определяет ряд вопросов, которые задаются пользователю. Для представления вопрос о том, требуется ли один из ответов на вопрос или нет, зависит от значения предыдущего вопроса.
Так в основном
Do you have a dog? Yes/No
What kind of dog do you have?
Действительные ответы на первый вопрос защищены с помощью enum, так что пользователь может предоставить только строки yes
или no
в качестве ответа на вопрос.
Если пользователь отвечает «да» на вопрос, я хочу, чтобы потребовался второй вопрос, чтобы, если второй ответ оставался пустым, когда первый ответ был yes
, возникала ошибка. Если первый ответ no
, пользователь может оставить второй вопрос пустым.
Ниже приведена схема JSON, которая у меня есть на данный момент для этого.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"question3-9": {
"type": "object",
"properties": {
"answer": {
"type": "string",
"enum": [
"Yes", "No"
]
}
},
"if": {
"properties":{
"answer": {"enum": ["Yes"]}
}
},
"then": {"requried": "#/definitions/question3-257"}
},
"question3-257": {
"type": "object",
"properties": {
"answer": {
"type": "string",
"minLength": 1
}
}
}
},
"type": "object",
"properties": {
"form_submission": {
"type": "object",
"properties": {
"sections": {
"type": "object",
"properties": {
"3": {
"type": "object",
"properties": {
"questions": {
"type": "object",
"properties": {
"9": {
"$ref": "#/definitions/question3-9"
},
"257": {
"$ref": "#/definitions/question3-257"
}
},
"required": [
"257"
]
}
}
}
},
"required": [
"3"
]
}
}
}
}
}
Я думал, что с помощью if-then-else, доступного в JSON-Schema7, я смогу задать второй вопрос как обязательный, но, похоже, он не работает так.
Вот представление, которое проверяется с использованием вышеуказанной схемы.
{
"form_submission": {
"sections": {
"3": {
"questions": {
"9": {
"answer": "Yes",
},
"257": {
"answer": "",
}
}
}
}
}
}
Обновленная схема JSON:
"3": {
"type": "object",
"properties": {
"questions": {
"type": "object",
"properties": {
"9": {
"$ref": "#/definitions/question3-9"
},
"257": {
"$ref": "#/definitions/question3-257"
}
},
"if": {
"properties":{
"answer": {"const": "Home improvements (General)"}
}
},
"then": {"required": ["257"]}
}
}
}
Подлежит проверке:
"3": {
"questions": {
"9": {
"answer": "Home improvements (General)",
},
"257": {
"answer": "", //<-- This is an empty string but should be required since the answer to the abvoe question is "Home improvements (general) as defined with "answer": {"const": "Home improvements (General)"}
}
}