我试图编写一个模式来验证以下内容。
对象Foo
可以包含任意数量的属性,这些属性必须是枚举或Foo
的另一个实例。
e.g。假设枚举值是A或B,则有效对象可能看起来像。
{
"test": "A",
"test1": "B",
"test2": {
"test4": "A",
"test5": {
"test6": "B"
}
}
}
答案 0 :(得分:3)
修改强>
使用自引用的架构越好越短,您可以尝试online
anyOf
优于oneOf
,因为oneOf
需要对所有项进行验证,以确保只有一次传递,但anyOf
可以在首次跳过后停止其他项目。
{
"anyOf": [
{
"enum": ["A", "B"]
},
{
"type": "object",
"additionalProperties": {
"$ref": "#"
}
}
]
}
anyOf
在根级别需要解决$ref
忽略所有同级关键字的JSON架构限制。
选中ajv cli
{
"anyOf": [
{"$ref": "#/definitions/Foo"}
],
"definitions": {
"Foo": {
"oneOf": [
{
"enum": ["A", "B"]
},
{
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/Foo"
}
}
]
}
}
}