我正在尝试使用json-schema验证JSON输入,但它不能像我需要的那样工作。
我有以下输入JSON(部分内容):
[
{
"admin_state": "disabled"
},
{
"state": "disabled"
}
]
以下json-schema(也是其中的一部分):
{
"type": "array",
"items": [
{
"type": "object",
"properties": {
"admin_state": {
"type": "string",
"default": "enabled",
"enum": [
"disabled",
"enabled"
]
}
},
"additionalProperties": false
}
],
"minItems": 1
}
我希望验证失败,因为不应该允许“state”属性(感谢“additionalProperties”:false 选项)
但是,我可以在数组的第二项中添加/更改任何内容,验证总是成功的。当我在第一项中更改任何内容时,验证失败(按预期)。
我错过了什么?
感谢您的帮助!
答案 0 :(得分:3)
JSON Schema draft 7(当前最新)声明......
如果"项目"是一个模式,验证成功,如果所有元素 数组成功验证该模式。
如果"项目"是一个模式数组,如果每个元素验证成功 如果实例的实例在相同位置验证模式 任何
在您的架构中,items
是一个数组,这意味着您只将该数组中的subschem应用于实例数组的第一个元素。只需从items
中删除方括号,您的子模式将适用于实例中的所有项目。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": {
"type": "object",
"properties": {
"admin_state": {
"type": "string",
"default": "enabled",
"enum": [
"disabled",
"enabled"
]
}
},
"additionalProperties": false
},
"minItems": 1
}