JSON架构中的"additionalProperties"规则不应用于嵌套级别的属性



所以我有一个JSON模式,其中additionalProperties规则设置为类似false的规则。

{
"type": "object",
"properties": {
"metadata": {
"type": "object",
"properties": {
"a": {
"type": "string"
},
"b": {
"type": "string"
},
"c": {
"type": "string"
}
}
},
"street_type": {
"type": "string",
"enum": [
"Street",
"Avenue",
"Boulevard"
]
}
},
"additionalProperties": false
}

以及像这样的有效载荷

{
"metadata": {
"a": "aa",
"b": "bb",
"c": "cc",
"d": "dd"
}
}

如果我希望我的JSON模式解析器/验证器通过验证,我使用的com.github.fge.jsonschema.main.JsonSchemaJSON模式解析器通过验证,尽管metadata/d不存在于additionalProperties设置为false的模式中,

这很误导人,有人能告诉我正确的方向吗。

additionalPropertiesJSON模式定义是否仅适用于顶级字段而不适用于任何嵌套级别的字段?

additionalProperties JSON模式定义是否仅适用于顶级字段而不适用于任何嵌套级别字段?

不,只要它在描述对象的架构中,就可以将它放在所需的任何级别。在你的情况下,你只是把它放错了地方。这应该有效:

{
"type": "object",
"properties": {
"metadata": {
"type": "object",
"properties": {
"a": {
"type": "string"
},
"b": {
"type": "string"
},
"c": {
"type": "string"
}
},
"additionalProperties": false
},
"street_type": {
"type": "string",
"enum": [
"Street",
"Avenue",
"Boulevard"
]
}
}
}

假设您想按原样验证以下对象:

{
a: {
b: {
c: {
d: 42
}
}
}
}

一个有效的模式是:

{
"type": "object",
"additionalProperties": false,
"properties": {
"a": {
"type": "object",
"additionalProperties": false,
"properties": {
"b": {
"type": "object",
"additionalProperties": false,
"properties": {
"c": {
"type": "object",
"additionalProperties": false,
"properties": {
"d": {
"const": 42
}
}
}
}
}
}
}
}
}

上面的模式非常详细,但这里只是为了举例说明。通过使用$ref并将模式组合在一起,您应该能够使它更加简洁。

相关内容

  • 没有找到相关文章

最新更新