工作中需要对如下json结构进行验证:
"ActiveStatus" : [ { "effectiveDates" : { "effectiveFrom" : "2018-05-10T12:44:17Z", "effectiveTo" : "2018-05-11T00:29:29Z" }, "status" : "Active", "reason" : "" }, { "effectiveDates" : { "effectiveFrom" : "2018-05-11T00:29:29Z" }, "status" : "Inactive", "reason" : "Expired/Matured" } ],
使用cerberus, 定位到schema list.
(一)先从单条记录开始测试(cerberus_test_single.py)
from cerberus import Validator from datetime import datetime, date, time def string_toDatetime(string): return datetime.strptime(string, "%Y-%m-%d") schema={ 'effectiveDates':{ 'type':'dict', 'schema':{ 'effectiveFrom':{'type':'datetime'}, 'effectiveTo':{'type':'datetime'} } }, 'status':{'type':'string','allowed':['Active','Inactive']}, 'reason':{'type':'string'} } document={ 'effectiveDates':{ 'effectiveFrom':string_toDatetime('2018-05-10'), 'effectiveTo':string_toDatetime('2018-05-11'), }, 'status':'Active', 'reason':'Expired' } v=Validator(schema) v.validate(document) print(v.errors)
在命令行运行文件,验证成功:
E:\Learning\AWS\cerberus>cerberus_test.py
{}
注:结果为{}表示v.errors中没有错误,即验证成功。
如果修改上述文件中的document为如下:
document={ 'effectiveDates':{ 'effectiveFrom':string_toDatetime('2018-05-10'), 'effectiveTo':string_toDatetime('2018-05-11'), }, 'status':'ctive', 'reason':'Expired' }
此时将验证失败:
E:\Learning\AWS\cerberus>cerberus_test_single.py {'status': ['unallowed value ctive']}
(二)加入list, 验证多条的情况:
首先想到将上述schema
嵌套到一个schema里,然后type指定list:
dfef
fefef