前言前面一篇讲到json解析神器jsonpath, jsonpath是为了方便快速取值,如果我们要校验json的字段类型和格式,就不是那边方便了。 jsonschema先安装 jsonschema 依赖包
jsonschema 是基于JSON格式,用于定义 JSON 数据结构以及校验 JSON 数据内容。支持python2.7+和python3+ >>> from jsonschema import validate
>>> # A sample schema, like what we'd get from json.load()
>>> schema = {
... "type" : "object",
... "properties" : {
... "price" : {"type" : "number"},
... "name" : {"type" : "string"},
... },
... }
>>> # If no exception is raised by validate(), the instance is valid.
>>> validate(instance={"name" : "Eggs", "price" : 34.99}, schema=schema)
>>> validate(
... instance={"name" : "Eggs", "price" : "Invalid"}, schema=schema,
... )
Traceback (most recent call last):
...
ValidationError: 'Invalid' is not of type 'number' 也可以支持命令行执行
完全支持 使用示例如下带有token的校验,由于token的值不固定,它是一个40位长度的16进制,0-9和a-f生成的字符串,可以用正则匹配 from jsonschema import validate
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
# 需要校验的内容
result = {
"code": 0,
"msg": "login success!",
"token": "000038efc7edc7438d781b0775eeaa009cb64865",
"username": "test"
}
# 编写schema 内容
schema = {
"$schema": "http:///draft-04/schema#",
"title": "test demo",
"description": "validate result information",
"type": "object",
"properties": {
"code": {
"description": "error code",
"type": "integer"
},
"msg": {
"description": "error msg ",
"type": "string"
},
"token":
{
"description": "login success return token",
"maxLength": 40,
"pattern": "^[a-f0-9]{40}$", # 正则校验a-f0-9的16进制,总长度40
"type": "string"
}
},
"required": [
"code", "msg", "token"
]
}
# validate校验, 跟assert断言一个意思
validate(instance=result, schema=schema) validate 校验成功时候,不会有报错
schema语法
type取值
|
|