如果另一个键等于某个值,则Json模式检查键是否存在(草案4)
我想验证一个json键的存在,只有当另一个键存在并且等于某个值时 例如,在下面的json中,我希望只有当“key”等于“foo”时才出现“baz”: 我可以使用以下json模式(草案4)对其进行验证: 以下json也是有效的:如果另一个键等于某个值,则Json模式检查键是否存在(草案4),json,jsonschema,json-schema-validator,Json,Jsonschema,Json Schema Validator,我想验证一个json键的存在,只有当另一个键存在并且等于某个值时 例如,在下面的json中,我希望只有当“key”等于“foo”时才出现“baz”: 我可以使用以下json模式(草案4)对其进行验证: 以下json也是有效的: { "id":"myid", "key":"bar", "quuz":"quuz!" } 这是无效的(“键”=“条”需要“quuz”): 到目前为止,一切顺利。现在:如果“key”键丢失,我需要json也有效: { "id":"myid"
{
"id":"myid",
"key":"bar",
"quuz":"quuz!"
}
这是无效的(“键”=“条”需要“quuz”):
到目前为止,一切顺利。现在:如果“key”键丢失,我需要json也有效:
{
"id":"myid"
}
这不适用于上述模式,因为“anyOf”关键字设置了“required”字段
是否可能获得“任意或缺少密钥”行为?。单调的
有什么帮助吗?您可以通过描述两个独占的子模式来实现该逻辑,有键和无键:
{
"properties":
{
"key":{
"type": "string",
"enum": ["foo", "bar"]
},
"baz":{
"type": "string"
},
"quuz":{
"type": "string"
}
},
"oneOf":
[
{
"not": {"required": ["key"]}
},
{
"required": ["key"],
"anyOf": [
{
"properties":{
"key":{ "enum": ["foo"] }
},
"required": ["baz"]
},
{
"properties":{
"key":{ "enum": ["bar"] }
},
"required": ["quuz"]
}
]}
]
}
永远不要低估
not
的功能实际上它会起作用,因为它会触发的两个子模式:0和2,你可以在那里快速检查,它会验证一个空的json。但是假设json:{“baz”:“BAAAZZ”}验证其中一个(oneOf)条件。这里会触发其中两个条件:{“baz”:“quoz”:“}”,即使“key”丢失。我只需要在“key”:“foo”或“bar”被忽略时触发其中一个条件。
{
"id":"myid",
"key":"bar",
"baz":"baz!"
}
{
"id":"myid"
}
{
"properties":
{
"key":{
"type": "string",
"enum": ["foo", "bar"]
},
"baz":{
"type": "string"
},
"quuz":{
"type": "string"
}
},
"oneOf":
[
{
"not": {"required": ["key"]}
},
{
"required": ["key"],
"anyOf": [
{
"properties":{
"key":{ "enum": ["foo"] }
},
"required": ["baz"]
},
{
"properties":{
"key":{ "enum": ["bar"] }
},
"required": ["quuz"]
}
]}
]
}