schema list validator --python cerberus

工作中需要对如下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

猜你喜欢

转载自www.cnblogs.com/yanzibuaa/p/9110983.html