我有以下 JSON 文档。
[
{
"name": "aaaa",
"data": {
"key": "id",
"value": "aaaa"
}
},
{
"name": "bbbb",
"data": {
"key": "id1",
"value": "bbbb"
}
}
]
下面是我为上述内容创建的 JSON Schema。
{
"$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 的值对于数组中的第二项无效。但任何在线模式验证器都找不到。如果我们在第一个数组元素中使用不同的值,则会引发异常错误。
我假设我的模式在某种程度上是错误的。我期望的是,如果数组的任何子项具有枚举列表之外的值,则应该报告它们。
这是一个容易犯的错误,所以不要因为这个而自责!
items
可以是数组或对象。如果它是一个数组,它会验证实例数组中该位置的对象。这是 JSON Schema 规范(draft-7)的摘录
“items”的值必须是有效的 JSON Schema 或有效 JSON Schema 的数组。
如果“items”是一个模式,则如果数组中的所有元素都成功地针对该模式进行验证,则验证成功。
如果“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"
]
}
}
很好的答案。感谢您提供更多信息。我今天学到了一些新东西。:)
最受欢迎的!如果您有不属于 SO 的问题,请随时加入 JSON Schema slack。
该死的,我犯了这个错误损失了两天。很好的收获和很好的答案。
很高兴有帮助!您认为工具或 linting 可以提供什么来帮助避免这种情况?