我想使用JSON模式验证JSON文件,应要求几个“属性” 。
我在这里看到了一个非常有用的答案:https://stackoverflow.com/a/38781027/5201771->那里,作者讨论了如何解决单个属性的问题(例如,只有“ A”具有值“ foo”,因此请输入“ C”。
但是,我目前不知道如何将答案扩展到我的情况,因为有几个属性决定了结果。
为说明起见,我提供了一些应该通过或未通过验证的文件:
应通过:
{
"A": "bar"
"B": "baz"
}
{
"A": "foo"
"C": "some value"
}
{
"A": "bar"
"B": "foo"
"D": "some value"
}
应该失败:
{
"A": "foo"
"B": "foo"
"D": "some value"
}
答案 0 :(得分:2)
您可以通过多种方式组合条件,但通常将它们与allOf
组合是最佳方法。
{
"type": "object",
"properties": {
"A": {},
"B": {},
"C": {},
"D": {}
},
"allOf": [
{ "$ref": "#/definitions/if-A-then-C-is-required" },
{ "$ref": "#/definitions/if-B-then-D-is-required" }
],
"definitions": {
"if-A-then-C-is-required": {
"if": {
"type": "object",
"properties": {
"A": { "const": "foo" }
},
"required": ["A"]
},
"then": { "required": ["C"] }
},
"if-B-then-D-is-required": {
"if": {
"type": "object",
"properties": {
"B": { "const": "foo" }
},
"required": ["B"]
},
"then": { "required": ["D"] }
}
}
}