#json #jsonschema #json-schema-validator
#json #jsonschema #json-schema-validator
Вопрос:
Я пытаюсь проверить схему json для моего объекта. Но если else не выполняется для моего объекта. Итак, здесь, в этом примере, я хочу проверить, есть ли описание продажи, когда служба продажи ‘Y’ (обратите внимание, я хочу выполнить if else для объекта внутри объекта), потому что планирование продаж находится внутри объекта продажи.
"Sale":{
"type":"object",
"properties":{
"SaleScheduling":{
"type":"object",
"properties":{
"SaleDescription":{
"type":"string"
},
"SaleService":{
"type":"string",
"minLength":1,
"enum":[
"Y",
"N"
]
}
},
"if":{
"properties":{
"SaleService":{
"const":"Y" //if this is Y, SaleDescription should be present
}
}
},
"then":{
"properties":{
"SaleDescription":{
"minLength":1
}
}
},
"else":{
"properties":{
"SaleDescription":{
}
}
},
"required":[
"SaleService"
]
}
},
"required":[
"SaleScheduling"
]
}
Ответ №1:
Чтобы сделать свойство обязательным с помощью схемы JSON, вам необходимо использовать required
ключевое слово. Ваша подсхема в else
…
{
"properties":{
"SaleDescription":{
"minLength":1
}
}
Это будет применяться только minLength
в том случае, если свойство SalesDescription
существует. Если оно не существует, это не вызовет ошибки. Вот как работает применимость в схеме JSON. properties
применяет подсхемы к объекту на основе ключей. { "minLength": 1 }
сама по себе является подсхемой, которая применяется к местоположению в экземпляре.
Это пример проблемы X / Y. Ваш if/then
работает правильно, но then
подсхема не выполняет то, что вы ожидаете.
Комментарии:
1. Чтобы помочь отладке схемы JSON, вы можете установить для любой
false
подсхемы значение, чтобы увидеть, используется ли эта подсхема или нет.false
приведет к сбою проверки, но подсхема должна быть применена.2. Не могли бы вы предоставить дополнительную информацию о том, как установить для subschema значение false и как его отладить. — Повторный вопрос
3. Например,
"properties": { "SaleDescription": false }
это будет означать, что любое значениеSaleDescription
приведет к сбою проверки. Живая демонстрация: jsonschema.dev / s/ v8erZ4. Или даже
"then": false
.true
иfalse
являются допустимыми значениями схемы! =]5. Можем ли мы применить условие if else на основе значений извне объекта?