当在架构中使用$ref声明项目时,JSON架构验证不会验证Array项目。它允许对象中存在模式中不存在的其他属性,尽管additionalProperties
在根模式对象中设置为False。下面是一个示例模式json schema,您可以在其中重现这个问题。
{
"StudentDetails": {
"$ref": "#"
},
"Student":
{
"type": "object",
"properties": {
"name": {
"description": "A link that can be used to fetch the next batch of results. The link contains an opaque continuation token.",
"nullable": "true",
"type": "string"
},
"age": {
"description": "The average rating of the title",
"type": "number",
"format": "double"
}
}
},
"type": "object",
"additionalProperties": false,
"unevaluatedItems": false,
"unevaluatedProperties": false,
"properties": {
"Students": {
"type": "array",
"items": {
"$ref": "#/Student"
}
}
}
}
这里有一个示例对象,理想情况下应该失败验证,但它实际上成功了。
{
""Students"": [
{
""name"": ""X""
},
{
""age"": 20
},
{
""height"": 6
}
]
}
我预计JSCema验证会失败,说明“height”属性未求值。
我只在数组中看到这个问题。任何直接的对象验证都可以很好地工作,即使是嵌套的对象结构。
有人能帮我解决这个问题吗?
我正在测试JSchema验证器的边缘情况,遇到了这个问题,Array对象没有被正确验证。
2条答案
按热度按时间biswetbf1#
JSON Schema规范没有同时接受
"nullable": true
(null
被添加为可能的type
)和"unevaluatedProperties": false
的版本。您使用的是什么实现?无论如何,它是错误的,因为在items
中使用$ref
是完全有效的。yv5phkfx2#
你有没有试过在
Student
声明本身设置additionalProperties
?