重新发布问题如何使用 JSON Schema 实现条件嵌套属性(标记为重复,尽管它是一个完全不同的问题)我的 JSON 模式在下面尝试基于:JSON Schema if/then 需要嵌套对象
{
"$id": "myschema.json",
"if":{
"type":"object",
"properties": {
"common_data": {
"type":"object",
"properties":{
"remote_os": {
"type":"object",
"required":["common_data"],
"const": "Linux"
}
},
"required":["remote_os"]
}
}
},
"then": {
"type":"object",
"properties": {
"file": {
"type": "string",
"pattern": "^(.*.)(bin)$"
}
}
},
"else": {
"type":"object",
"properties": {
"file": {
"type": "string",
"pattern": "^(.*.)(exe)$"
}
}
}
}
基本上添加if-else
逻辑以确保remote_os=Linux
file
应该结束.bin
并且remote_os=Windows
file
应该结束.exe
现在我正在尝试验证以下数据
{
"common_data": {
"remote_os": "Linux"
},
"file": "abc.bin"
}
得到错误:[<ValidationError: "'abc.bin' does not match '^(.*.)(exe)$'">]
当尝试调试python
jsonschema
尝试在此架构之上构建的属性以验证我的数据时。收到
properties {'common_data': {'type': 'object', 'properties': {'remote_os': {'type': 'object', 'required': ['common_data'], 'const': 'Linux'}}, 'required': ['remote_os']}}
properties {'remote_os': {'type': 'object', 'required': ['common_data'], 'const': 'Linux'}}
properties {'file': {'type': 'string', 'pattern': '^(.*.)(exe)$'}}
'pattern': '^(.*.)(exe)$'
所以它总是与不考虑的匹配remote_os
。寻找一些指导,如何解决这个问题。