所以我有一个additionalProperties
规则设置为false
的JSON模式。
{
"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.JsonSchema
的JSON模式解析器通过验证,尽管设置了metadata/d
的模式中没有additionalProperties
到false
,
这是很容易引起误解的,有人可以将我引导到正确的方向。
additionalProperties
JSON模式定义仅适用于顶级字段而不适用于任何嵌套级别字段吗?
答案 0 :(得分:1)
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
并将架构组合在一起,您应该能够使其更加简洁。