Python - 根据架构验证 JSON 文件中的所有行
Python - Validate all rows in JSON file against schema
我正在尝试根据模式验证 JSON 数据文件中的所有行,而不循环遍历 JSON 文件中的每个数据条目。
然而,当只传递整个 JSON 文件时,不会返回任何验证错误。当遍历 JSON 文件中的每一行时,验证按预期工作。
我包括了两个验证,第一个是我想要验证但没有按预期工作的方式。第二次验证有效,但我不想循环。
Python代码:
import json
from jsonschema import validate
data = [
{
"Col1":"asd",
"Col2":"awer",
"Col3":"xyz"
},
{
"Col1":"asd",
"Col2":"awer",
"Col3":123
}
]
schema = {
"title": "test",
"properties":{
"Col1" : {
"minLength": 0,
"maxLength": 15,
"type": "string"
},
"Col2" : {
"minLength": 0,
"maxLength": 15,
"type": "string"
},
"Col3" : {
"minLength": 0,
"maxLength": 15,
"type": "string"
}
}
}
# Does not return an error
validate(instance=data, schema=schema)
# Works as expected
for i in range(0,2):
validate(instance=data[i], schema=schema)
您的 JSON 架构未定义数据中预期的 top-level 数组,因此验证器根本不验证任何输入。如果您传递单个对象(数组项),则会验证您定义的属性。
解决方案是将您的模式放在 items
关键字中,作为定义数据数组的 top-level 模式的一部分。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "JSON schema generated with JSONBuddy https://www.json-buddy.com",
"title": "",
"type": "array",
"items": {
"type": "object",
"properties": {
"Col1": {
"minLength": 0,
"maxLength": 15,
"type": "string"
},
"Col2": {
"minLength": 0,
"maxLength": 15,
"type": "string"
},
"Col3": {
"minLength": 0,
"maxLength": 15,
"type": "string"
}
}
}
}
我正在尝试根据模式验证 JSON 数据文件中的所有行,而不循环遍历 JSON 文件中的每个数据条目。
然而,当只传递整个 JSON 文件时,不会返回任何验证错误。当遍历 JSON 文件中的每一行时,验证按预期工作。
我包括了两个验证,第一个是我想要验证但没有按预期工作的方式。第二次验证有效,但我不想循环。
Python代码:
import json
from jsonschema import validate
data = [
{
"Col1":"asd",
"Col2":"awer",
"Col3":"xyz"
},
{
"Col1":"asd",
"Col2":"awer",
"Col3":123
}
]
schema = {
"title": "test",
"properties":{
"Col1" : {
"minLength": 0,
"maxLength": 15,
"type": "string"
},
"Col2" : {
"minLength": 0,
"maxLength": 15,
"type": "string"
},
"Col3" : {
"minLength": 0,
"maxLength": 15,
"type": "string"
}
}
}
# Does not return an error
validate(instance=data, schema=schema)
# Works as expected
for i in range(0,2):
validate(instance=data[i], schema=schema)
您的 JSON 架构未定义数据中预期的 top-level 数组,因此验证器根本不验证任何输入。如果您传递单个对象(数组项),则会验证您定义的属性。
解决方案是将您的模式放在 items
关键字中,作为定义数据数组的 top-level 模式的一部分。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "JSON schema generated with JSONBuddy https://www.json-buddy.com",
"title": "",
"type": "array",
"items": {
"type": "object",
"properties": {
"Col1": {
"minLength": 0,
"maxLength": 15,
"type": "string"
},
"Col2": {
"minLength": 0,
"maxLength": 15,
"type": "string"
},
"Col3": {
"minLength": 0,
"maxLength": 15,
"type": "string"
}
}
}
}