我正在编写一个简单的JSON模式,并使用elif (postcode[0]) == str(1) or (postcode[0]) == str(2) or (postcode[0]) == str(5):
来验证给定数组中的项目数。我的架构如下:
if (postcode[0]) == "0" or (postcode[0]) == "6":
billing = 25
elif (postcode[0]) == "1" or (postcode[0]) == "2" or (postcode[0]) == "5":
billing = 15
elif (postcode[0]) == "3":
billing = 12
else:
billing = 20
现在我希望以下JSON验证失败,因为元素minItems
中没有任何内容。但是当使用this online validator时,它会通过。我做错了什么,或者我使用错误的架构验证器?
{
"title": "My Schema",
"type": "object",
"properties": {
"root": {
"type": "array",
"properties": {
"id": {
"type": "string"
},
"myarray": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 4,
"uniqueItems": true
},
"boolean": {
"type": "boolean"
}
},
"required": ["id","myarray","boolean"]
}
},
"required": [
"root"
],
"additionalProperties": false
}
答案 0 :(得分:1)
我不确定为什么或它被称为什么,但是您的要求的正确架构定义应该如下所示。
根据我对JSON Schema定义的理解,您应该在items声明中声明数组的属性。在您的模式中,您可以在数组项声明之外定义属性。
在您的架构中,您有两种不同类型的数组声明:
查看两者的定义,它们的结构以及如何解释它们。
更正后的架构:
{
"title": "My Schema",
"type": "object",
"properties": {
"root": {
"type": "array",
"items": { <-- Difference here - "items" instead of "properties"
"type": "object", <-- here - define the array items as a complex object
"title": "myComplexType", <-- here - named for easier referencing
"properties": { <-- and here - now we can define the actual properties of the object
"id": {
"type": "string"
},
"myarray": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 4,
"uniqueItems": true
},
"boolean": {
"type": "boolean"
}
}
},
"required": [
"id",
"myarray",
"boolean"
]
}
},
"required": [
"root"
],
"additionalProperties": false
}
删除我在复制到您的代码时添加<--
的评论,添加以指示更改的位置。
作为一个说明,我确实不明白为什么验证人没有为“格式错误”提供错误。架构,但可能就是它看到了定义,因为你将它作为附加属性,并不完全确定。
答案 1 :(得分:0)
您的架构唯一的问题是root
属性应该是object
而不是array
。由于未为数组定义properties
关键字,因此将忽略该关键字。因此,您尝试测试的模式部分完全被忽略,即使它是正确的。
以下是规范中的相关段落
某些验证关键字仅适用于一种或多种基本类型。当实例的原始类型无法通过给定关键字验证时,此关键字和实例的验证应该成功。