我有这个模式要求,如果A和B不存在,C必须是,如果C存在,A和B不应该存在。
例如:
{
"group1": {
"a": 10
},
"group2": {
"group3": {
"b": 30
}
},
"group4": {
"c": 20
}
}
如果存在a
,则b
和c
不应位于json中。
如果存在b
和c
,则a
不应位于json中。
我可以看到,在v6 json架构规范中,有一些关键字switch
可以帮助满足这些要求但无法使其正常工作。
使用当前规范甚至可以进行架构验证吗?
答案 0 :(得分:3)
draft-06是当前的规范,但还没有条件。 draft-07有if / then / else使用你可以:
{
"if": {"required": ["a"]},
"then": {"not": {"$ref": "#/definitions/bc"}},
"else": {"$ref": "#/definitions/bc"},
"definitions": {
"bc": {
"anyOf": [
{"required": ["b"]},
{"required": ["c"]}
]
}
}
}
目前,Ajv使用ajv-keywords支持/ then / else。
任何条件都可以使用关键字anyOf,allOf而不是if / then / else来表达:
{
"anyOf": [
{"allOf": [ifSchema, thenSchema]},
{"allOf": [{"not": ifSchema}, elseSchema]}
]
}