Я использую шаблон схемы JSON для проверки данных, полученных с помощью онлайн-формы. Одним из требований валидатора является то, что он позволяет требовать некоторые вопросы на основе ответов, данных на другие вопросы.
Например, если вопрос - Do you want a loan?
, а пользователь отвечает yes
, тогда для ответа на вопрос What is the loan to be used for?
необходимо установить значение «Требуется», чтобы пользователь должен был дать ответ. Если ответ no
, то второй вопрос не требуется.
Я использую определения для определения своих вопросов, а затем ссылаюсь на них ниже в основной схеме вопросов. Я читал, что, используя функцию if-then-else, представленную в draft-07, я мог бы использовать ее, чтобы задать определенные вопросы, которые потребуются на основе ответов на другие вопросы.
В этом конкретном случае я бы хотел, чтобы если пользователь вводил ответ Home improvements (General)
на вопрос 9, тогда вопрос 257 будет установлен как обязательный и ДОЛЖЕН быть дан ответ, в противном случае должна быть выдана ошибка.
В настоящий момент, когда я ввожу этот валидатор в https://www.jsonschemavalidator.net/, он не работать как положено. На самом деле происходит то, что ответ на вопрос 257 можно оставить пустым, даже если ответ на вопрос 9 - «Усовершенствования дома (общие).
Как я могу изменить мою схему, чтобы добиться желаемого поведения?
Схема JSON
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"question3-9": {
"type": "object",
"properties": {
"answer": {
"type": "string",
"enum": [
"Home improvements (General)",
"Other"
]
}
}
},
"question3-257": {
"type": "object",
"properties": {
"answer": {
"type": "string",
}
}
}
},
"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"
}
},
"if": {
"properties": {
"9": {
"properties": {
"answer": {
"enum": [
"Home improvements (General)"
]
}
}
}
}
},
"then": {
"required": [
"257"
]
}
}
}
}
},
"required": [
"3"
]
}
}
}
}
}
JSON для проверки:
{
"form_submission": {
"sections": {
"3": {
"questions": {
"9": {
"answer": "Home improvements (General)",
},
"257": {
"answer": "",
}
}
}
}
}
}
Обновлено If-Then
"if": {
"properties": {
"9": {
"properties": {
"answer": {
"enum": [
"Home improvements (General)"
]
}
},
"required": ["answer"]
}
},
"required": ["9"]
},
"then": {
"257": {
"properties":{
"answer":{
"minLength": 1
}
}
}
}
required
, и что значениеthen
должно быть схемой. - person Relequestual   schedule 30.01.2019