因此我有一个additionalProperties
规则设置为false
like JSON schema。
{
"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 schema解析器/验证器通过验证,那么我使用com.github.fge.jsonschema.main.JsonSchema
的JSON schema解析器通过了验证,尽管metadata/d
不存在于additionalProperties
设置为false
的模式中,
这是非常误导的,有人能给我指引正确的方向吗?
additionalProperties
JSON schema定义是否只适用于顶级字段,而不适用于任何嵌套级别的字段?
发布于 2018-12-14 05:38:59
是否additionalProperties JSON schema定义只适用于顶级字段,而不适用于任何嵌套级别的字段?
不,您应该能够将它放在所需的任何级别,只要它位于描述对象的模式中即可。在你的例子中,你只是把它放在了错误的地方。这应该是可行的:
{
"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
和将模式组合在一起,您应该能够使它更简洁一些。
https://stackoverflow.com/questions/53770325
复制相似问题