在JSON模式中,我试图基于嵌套对象中的值进行条件验证。我的架构和示例JSON如下。用简单的英语来说,我的规则是“如果bar.sub2是'cat',则需要baz”。
我的示例JSON通过了验证,并且由于baz不正确而应该失败。我可以合理地确定条件逻辑是正确的,并且bar.sub2的指针是不正确的。但我似乎无法弄清楚如何正确执行此操作的语法和结构。
示例JSON
{"foo": "someValue"
,"bar": {"sub1":"someValue", "sub2": "cat"}
}
模式:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"foo": { "type": "string"}
,"bar" : {
"type": "object"
,"properties": {
"sub1": { "type": "string"}
,"sub2": { "type": "string"}
},
"required" :["sub1","sub2"]
}
,"baz":{"type": "string"}
},
"oneOf":[
{"properties": {"not": {"/bar/sub2": { "enum": ["cat"]}}}}
,{"required" : ["baz"]}
],
"required": ["foo","bar"],
"definitions":{}
}
编辑: 找到了自己的答案here
正确的架构:
"oneOf":[
{"not" : {"$ref": "#/definitions/sub2IsCat"}}
,{"required" : ["baz"]}
],
"definitions":{
"sub2IsCat" :{
"properties":{
"bar": {
"properties":{
"sub2" :{ "enum": ["cat"] }}}}}
}