在项目中遇到有同时用到jsonschema模块来验证数据结构感觉挺有用的,记录一下
如果我想要验证一个普通的字典结构该怎么办?
字典
from jsonschema import validate, ValidationError #这里的type要写json支持的type schema = { 'type': 'object', "properties": { "price": {"type": "number"}, "name": {"type": "string"} }, "required": ["price", "name"] # 要求必须传的参数 } data = { "price": 34.55, "name": "egg" } try: validate(data, schema) #验证通过啥也不返回,不通过就会报错 except ValidationError as e: print(e)
数组
简单数组
schema = { "maxItems": 2 # 最大只能两个元素 } data = [1, 2, 3] try: validate(data, schema) except ValidationError as e: print(e) #结果 [1, 2, 3] is too long Failed validating 'maxItems' in schema: {'maxItems': 2} On instance: [1, 2, 3]
复杂数组,即数组里边含有字典
schema = { "type": "array", "items": { 'type': 'object', 'properties': { 'id': {'type': 'string'}, 'price': {'type': 'number'}, }, "required": ["price"] # 注意这个要放在字典里边,否则不起作用 } } data = [{'id': "222", 'price': 45}] try: validate(data, schema) except ValidationError as e: print(e)