我有下面的JSON文档。
[
{
"name": "aaaa",
"data": {
"key": "id",
"value": "aaaa"
}
},
{
"name": "bbbb",
"data": {
"key": "id1",
"value": "bbbb"
}
}
]
下面是我为上述内容创建的JSON模式。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array",
"items": [
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"key": {
"type": "string",
"enum": [
"id",
"temp",
]
},
"value": {
"type": "string",
}
},
"required": [
"key",
"value"
]
}
},
"required": [
"name",
"data"
]
}
]
}
根据架构,data.key的值对于数组中的第二项无效。但是任何在线模式验证器都找不到。如果我们在第一个数组元素中使用不同的值,则会引发例外错误。
我认为我的模式有某种错误。我期望的是,如果数组的任何子项的值都超出枚举列表,则应该报告它们。
答案 0 :(得分:2)
这是一个容易犯的错误,所以不要为这个而beat不休!
items
可以是数组或对象。如果是数组,它将验证实例数组中该位置的对象。这是JSON模式规范的摘要(草稿7)
“ items”的值必须是有效的JSON模式或一个数组 有效的JSON模式。
如果“ items”是模式,则如果 阵列针对该架构成功验证。
如果“ items”是模式数组,则每个元素的验证都将成功 实例的实例针对同一位置的架构进行验证,如果 任何。
JSON Schema (validation) draft-7 items
删除方括号可为您提供正确的架构...
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array",
"items":
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
"key": {
"type": "string",
"enum": [
"id",
"temp",
]
},
"value": {
"type": "string",
}
},
"required": [
"key",
"value"
]
}
},
"required": [
"name",
"data"
]
}
}