我的程序获取一个包含服务信息的
JSON文件.
在运行服务程序之前,我想检查JSON文件是否为valide(仅检查是否存在所有必需的密钥).
以下是此程序的标准(必要数据)JSON格式:
{
"service" : "Some Service Name"
"customer" : {
"lastName" : "Kim",
"firstName" : "Bingbong",
"age" : "99",
}
}
现在我正在检查JSON文件验证,如下所示:
import json
def is_valid(json_file):
json_data = json.load(open('data.json'))
if json_data.get('service') == None:
return False
if json_data.get('customer').get('lastName') == None:
return False
if json_data.get('customer').get('firstName') == None:
return False
if json_data.get('customer').get('age') == None:
return False
return True
实际上,JSON标准格式有20多个密钥.有没有其他方法来检查JSON格式?
最佳答案 您可以考虑使用
jsonschema
来验证您的JSON.这是一个验证您的示例的程序.要将其扩展到“20个键”,请将键名添加到“必需”列表中.
import jsonschema
import json
schema = {
"type": "object",
"customer": {
"type": "object",
"required": ["lastName", "firstName", "age"]},
"required": ["service", "customer"]
}
json_document = '''{
"service" : "Some Service Name",
"customer" : {
"lastName" : "Kim",
"firstName" : "Bingbong",
"age" : "99"
}
}'''
try:
# Read in the JSON document
datum = json.loads(json_document)
# And validate the result
jsonschema.validate(datum, schema)
except jsonschema.exceptions.ValidationError as e:
print("well-formed but invalid JSON:", e)
except json.decoder.JSONDecodeError as e:
print("poorly-formed text, not JSON:", e)
资源:
> https://pypi.python.org/pypi/jsonschema
> http://json-schema.org/example1.html