我有一个没有进行适当验证的架构定义。基本上,它不会检查数组中的任何内容并接受其中的任何属性/值。我是JSON验证的新手,所以我可能会遗漏一些东西。
这是架构:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://json-schema.org/draft-07/schema#",
"title": "JSON Validator",
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hash": {
"type": "string"
},
"date": {
"type": "string"
},
"uuid": {
"type": "string"
},
"task": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"order": {
"type": "integer"
},
"step": {
"type": "integer"
}
}
},
"meta": {
"type": "string"
},
"additionalProperties": false,
}
},
"required": [
"hash"
]
}
}
测试JSON就是这样:
{
"task_N": [
{
"uuid": "asdfsdafa",
"author": {
"id": 1,
"email": "asdfasdd",
"name": "dfasd"
},
"ip": "245245",
"message": "asdfasd",
"step": "",
"is_archived": false,
"creation_date": "34332423",
"related_field": ""
},
{
"uuid": "asdfsdafa",
"author": {
"id": 1,
"email": "asdfasdd",
"name": "dfasd"
},
"ip": "245245",
"message": "asdfasd",
"step": "",
"is_archived": false,
"creation_date": "34332423",
"related_field": ""
}
]
}
正如您所看到的,数组属性中没有单一匹配,但python库jsonschema和http://jsonschemavalidator.net都将JSON视为对模式有效。我一直在挠头几个小时,有没有人知道?
答案 0 :(得分:1)
出现这种情况有几个原因,JSON模式要求您的整个示例与模式匹配,因此您需要将“task_N”作为模式的一部分。
此外,您的架构在additionalProperties
中定义,应该是properties
。
试试这个:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://json-schema.org/draft-07/schema#",
"title": "JSON Validator",
"type": "object",
"properties": {
"task_N": {
"type": "array",
"items": {
"type": "object",
"required": [
"hash"
],
"properties": {
"hash": {
"type": "string"
},
"date": {
"type": "string"
},
"uuid": {
"type": "string"
},
"task": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"order": {
"type": "integer"
},
"step": {
"type": "integer"
}
}
},
"meta": {
"type": "string"
},
"additionalProperties": false
}
}
}
}
}
答案 1 :(得分:0)
找到解决方案。似乎我不仅要将数组属性设置为false,还要设置父级。另外,我需要将其设置为" patternProperties"正确的正则表达式。完成的架构是:
{
'$schema': 'http://json-schema.org/draft-07/schema#',
'$id': 'http://json-schema.org/draft-07/schema#',
'type': 'object',
'patternProperties': {
'^[a-zA-Z0-9]*$': {
'type': 'array',
'items': {
'type': 'object',
'required': [
'hash',
'date',
'uuid',
'task',
'author'
],
'properties': {
'hash': {
'type': 'string'
},
'date': {
'type': 'string'
},
'uuid': {
'type': 'string'
},
'task': {
'type': 'object',
'properties': {
'name': {
'type': 'string'
},
'order': {
'type': 'integer'
},
'step': {
'type': 'integer'
}
}
},
'author': {
'type': 'object',
'properties': {
'id': {
'type': 'integer'
},
'name': {
'type': 'string'
},
'email': {
'type': 'string'
}
}
},
'meta': {
'type': 'string'
}
},
'additionalProperties': false
}
}
},
'additionalProperties': false
}