鉴于此架构:
{
"type": "object",
"patternProperties": {
"^(.*)$": {
"type": "object",
"patternProperties": {
"^.*$": {
"oneOf": [
{
"type": "string",
"enum": ["Token1", "Token2", "Token3"]
}
]
}
}
}
}
}
我能够验证这类数据:
{
"myobject": {
"prop1": "Token1",
"prop2": "Token2",
"prop3": "Token3"
},
"anotherobject": {
"otherprop1": "Token1",
"otherprop2": "Token3"
}
}
即。顶级对象下的每个属性值都应该在["Token1", "Token2", "Token3"]
枚举中。如果我将Token4
设置为值,则无法按预期验证。
是否可以匹配捕获组^(.*)$
模式的值,并在oneOf
下添加另一条规则,暗示:或者该值是(顶级)对象名称的集合?要成功验证这样的事情:
{
"myobject": {
"prop1": "Token1",
"prop2": "Token2",
"prop3": "Token3"
},
"anotherobject": {
"otherprop1": "myobject", <- note this
"otherprop2": "Token3"
}
}
但
失败{
"myobject": {
"prop1": "Token1",
"prop2": "Token2",
"prop3": "Token3"
},
"anotherobject": {
"otherprop1": "non-existing-object", <- note this
"otherprop2": "Token3"
}
}
并且最好/可选地检查基本递归以使该输入失败:
{
"myobject": {
"prop1": "Token1",
"prop2": "Token2",
"prop3": "Token3"
},
"anotherobject": {
"otherprop1": "anotherobject", <- note this
"otherprop2": "Token3"
}
}
答案 0 :(得分:0)
不使用JSON架构。其领域是结构验证;您描述的规则可以在代码中实现。有些验证器允许使用自定义关键字。
顺便说一下,您可以使用additionalProperties关键字将架构应用于所有属性。