具有无限未知属性名称的JSON架构



我想创建一个JSON模式(v2020-12(,它可以验证设计令牌
这里的问题是,这些令牌可以无限嵌套,每个嵌套的属性可以有任何名称。

架构应验证一个属性是否可以具有一个其他名称未知的属性或设计令牌。不应允许使用其他属性。

这应该是有效的:

{
"unknown_property_1": {
"unknown_property_2": {
<< nesting with unknown depth >>
"unknown_property_n": {
"$value": "#fff",
"$type": "this is a token with mandatory $value and $type"
}
}       
}
}

这不是:

{
"unknown_property_1": {
"fancy_unwanted_property": 123,
"unknown_property_2": {
"unknown_property_n": {
"$value": "#fff",
"$type": "this is a token with mandatory $value and $type"
}
}       
}
}

我用";任意";以及"$ref";但无法靠近。

递归结构可以在JSON模式中非常优雅地定义。这是最简单的版本。

{
"type": "object",
"properties": {
"$value": { "type": "string" },
"$type": { "type": "string" }
},
"additionalProperties": { "$ref": "#" }
}

如果你需要一个更严格的版本,这是一个替代方案。

{
"anyOf": [
{
"type": "object",
"properties": {
"$value": { "type": "string" },
"$type": { "type": "string" }
},
"additionalProperties": false
},
{
"type": "object",
"patternProperties": {
"": { "$ref": "#" }
}
}
]
}

最新更新