我有以下架构,我想要完成的是,我可以拥有以下一个或多个:
a1
但不是a2
,反之亦然b1
但不是b2
,反之亦然c1
但不是c2
,反之亦然这是我正在尝试的json架构,但它不起作用:
{
"type": "object",
"properties": {
"action": {
"type": "object",
"properties": {
"a1": {},
"a2": {},
"b1": {},
"b2": {},
"c1": {},
"c2": {}
},
"anyOf": [
{
"oneOf": [
{"required": ["a1"]},
{"required": ["a2"]}
]
},
{
"oneOf": [
{"required": ["b1"]},
{"required": ["b2"]}
]
},
{
"oneOf": [
{"required": ["c1"]},
{"required": ["c2"]}
]
}
]
}
}
}
它告诉我以下是有效的json:
{
"action": {
"a1": {},
"b1": {},
"b2": {}
}
}
这不应该有效,因为b1
和b2
都已设置。
答案 0 :(得分:0)
我认为最好的方法是使用dependencies
。这就是说,如果存在“a1”,那么“a2”就不存在了(b和c等等)。
{
"type": "object",
"dependencies": {
"a1": { "not": { "required": ["a2"] } },
"b1": { "not": { "required": ["b2"] } },
"c1": { "not": { "required": ["c2"] } }
}
}
编辑:完整架构
{
"type": "object",
"properties": {
"action": {
"type": "object",
"properties": {
"a1": {},
"a2": {},
"b1": {},
"b2": {},
"c1": {},
"c2": {}
},
"dependencies": {
"a1": { "not": { "required": ["a2"] } },
"b1": { "not": { "required": ["b2"] } },
"c1": { "not": { "required": ["c2"] } }
}
}
}
}
请注意,在这种情况下声明属性是没有意义的,因为它们是空模式。我把它留在了里面以避免混淆。