Python全量字段校验
Python全量字段校验
1.概念与安装
1.1全量字段校验概念
- 校验接⼝返回响应结果的全部字段
1.2校验内容
- 字段值
- 字段名 或 字段类型
1.3校验流程
- 定义json语法校验格式
- ⽐对接口实际响应数据是否符合json校验格式
1.4安装 jsonschema库
pip install jsonschema -i https://pypi.douban.com/simple/
1.5 安装查验
- pip 查验:pip list 或 pip show jsonschema
- pycharm 中 查验:file — settings — 项目名中查看 python解释器列表是否有jsonschema。
1.6 Python全量字段校验在线校验
JSON Schema Validator - Newtonsoft
2.python代码校验
2.1实现步骤:
- 导包 import jsonschema
- 定义 jsonschema格式 数据校验规则
- 调⽤ jsonschema.validate(schema=“jsonshema规则”,instance=“json数据”,)
2.1查验校验结果
- 校验通过:返回 None
- 校验失败
- schema 规则错误,返回 SchemaError json
- 数据错误,返回 ValidationError
3. JSON Schema语法
3.1 JSON Schema语法关键字
- type:表示待校验元素的类型
- properties:定义待校验的JSON对象中,各个key-value对中value的限制条件
- required:定义待校验的JSON对象中,必须存在的key
- const:JSON元素必须等于指定的内容
- pattern:使用正则表达式约束字符串类型数据
1. 导包
import jsonschema
# 2. 创建 校验规则
schema = {"type": "object","properties": {"success": {"type": "boolean"},"code": {"type": "integer"},"message": {"type": "string"}},"required": ["success", "code", "message"]}
# 准备待校验数据
data = {"success": True,"code": 1.00,"message": "操作成功"
}
# 3. 调用 validate 方法,实现校验
result = jsonschema.validate(instance=data, schema=schema)
print("result =", result)
# None: 代表校验通过
# ValidationError:数据 与 校验规则不符
# SchemaError: 校验规则 语法有误
3.2 type关键字
作用:约束数据类型
integer —— 整数
string —— 字符串
object —— 对象
array —— 数组 --> python:list 列表
number —— 整数/⼩数
null —— 空值 --> python:None
boolean —— 布尔值
语法:
{"type": "数据类型"
}
示例
import jsonschema
# 准备校验规则
schema = {"type": "object" # 注意 type 和 后面的 类型,都要放到 "" 中!
}
# 准备数据
data = {"a": 1, "b": 2}
# 调用函数
res = jsonschema.validate(instance=data, schema=schema)
print(res)
3.3properties关键字
说明:是 type关键字的辅助。用于 type 的值为 object 的场景。
作用:指定 对象中 每个字段的校验规则。 可以嵌套使用。
语法:
{"type": "object","properties":{"字段名1":{规则},"字段名2":{规则},......}
}
import jsonschema
# 准备校验规则
schema = {"type": "object","properties": {"success": {"type": "boolean"},"code": {"type:": "integer"},"message": {"type": "string"},"money": {"type": "number"},"address": {"type": "null"},"data": {"type": "object","properties": {"name": {"type": "string"},"age": {"type": "integer"},"height": {"type": "number"},}},"luckyNumber": {"type": "array"}}
}
# 准备测试数据
data = {"success": True,"code": 1,"message": "操作成功","money": 8.88,"address": None,"data": {"name": "tom","age": 18,"height": 1.88},"luckyNumber": [1, 3, 5]
}
# 调用方法进行校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)
3.4 required关键字
作用:校验对象中必须存在的字段。字段名(key)必须是字符串,且唯⼀
语法:
{"required": ["字段名1", "字段名2", ...]
}
import jsonschema
# 测试数据
data = {"success": True,"code": 11,"message": "操作成功","data": None,}
# 校验规则
schema = {"type": "object","required": ["success", "code", "message", "data"]
}
# 调用方法校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)
3.5 const关键字
作用:校验字段值(values)是⼀个固定值。
语法:
{"字段名":{"const": 具体值}
}
import jsonschema# 测试数据
data = {"success": True,"code": 2,"message": "操作成功","data": None,
}# 校验规则
schema = {"type": "object","properties": {"success": {"const": True},"code": {"const": 1},"message": {"const": "操作成功"},"data": {"const": None}},"required": ["success", "code", "message", "data"]
}# 调用方法校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)
3.6 pattern关键字
作用:指定正则表达式,对字符串进行模糊匹配
基础正则举例:
1 包含字符串:hello
2 以字符串开头 ^: ^hello 如:hello,world
3 以字符串结尾 $: hello$ 如:中国,hello
4 匹配[]内任意1个字符[]: [0-9]匹配任意⼀个数字 [a-z]匹配任意一个小写字母 [cjfew9823]匹配任意一个
5 匹配指定次数{}: [0-9]{11}匹配11位数字。匹配 手机号:^[0-9]{11}$
语法:
{"字段名":{"pattern": "正则表达式"}
}
import jsonschema
# 测试数据
data = {"message": "!978jkd操作成功45687hh","mobile": "13900000000"
}
# 校验规则
schema = {"type": "object","properties": {"message": {"pattern": "操作成功"},"mobile": {"pattern": "^[0-9]{11}$"}}
}
# 调用方法校验
res = jsonschema.validate(instance=data, schema=schema)
print(res)
3.7 全量字段关键词综合应用
import jsonschema
# 测试数据
data = {"success": False,"code": 1,"message": "xxx登录成功","data": {"age": 18,"name": "Nancy"}
}
# 校验规则
schema = {"type": "object","properties": {"success": {"type": "boolean"},"code": {"type": "integer"},"message": {"pattern": "登录成功$"},"data": {"type": "object","properties": {"name": {"const": "Nancy"},"age": {"const": 18}},"required": ["name", "age"]}},"required": ["success", "code", "message", "data"]
}# 调用测试方法
res = jsonschema.validate(instance=data, schema=schema)
print(res)
ype": “object”,
“properties”: {
“name”: {“const”: “Nancy”},
“age”: {“const”: 18}
},
“required”: [“name”, “age”]
}
},
“required”: [“success”, “code”, “message”, “data”]
}
调用测试方法
res = jsonschema.validate(instance=data, schema=schema)
print(res)
Python全量字段校验相关推荐
- Python +大数据-知行教育(四)-意向用户主题看板_全量流程
Python +大数据-知行教育(四)-意向用户主题看板_全量流程 5. 意向用户主题看板_全量流程 5.1 需求分析 主要分析什么内容:1) 每一个需求涉及到那些维度, 那些直白2) 每一个需求涉及 ...
- Python实现目录文件的全量和增量备份
目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...
- python 读取文件夹 增量文件_Python实现目录文件的全量和增量备份
目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...
- python 爬取全量百度POI
在网上找了很多关于爬取百度POI的文章,但是对"全量"的做法并没有得到最终的解决方案,自己写了一个,但还是不能实现全量POI抓取,能够达到至少50%的信息抓取. 注意:这里所指&q ...
- python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...
2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...
- toastutils报错_史上最好用的Android全量版本更新库XUpdate使用指南
在这里插入图片描述 项目简介XUpdate是一个轻量级.高可用性的Android全量版本更新框架. XUpdate是为了解决在不同项目组.不同平台之间进行统一的Android全量版本更新的库.它具有轻 ...
- lucene 增量 全量 更新索引_10年+,阿里沉淀出怎样的搜索引擎?
阿里妹导读:搜索引擎是阿里的10年+沉淀,具有很高的技术/业务/商业价值.1688很多场景都借助了搜索中台的能力,基于此,以1688主搜为例介绍搜索全链路知识点,希望对你有所借鉴,有所启发. 一.整体 ...
- python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)
python 全栈开发,Day104(DRF用户认证,结算中心,django-redis) 考试第二部分:MySQL数据库 6. MySQL中char和varchar的区别(1分) char是定长, ...
- python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)
python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性) 昨日内容回顾 1.app播放音乐plus.audio.createPlayer(文件路径/URL)player.play( ...
最新文章
- Nature:13个维度,手把手教“研究er”如何做报告
- python存储numpy数据为文件_numpy.savetxt是否将数组保存到文件中的特定位置?
- PPIO 商业化架构解析
- VTK:图片之ImageMask
- inuri .php id=,php常用函数(遇见就补充)
- python importlib_学习python importlib的导入机制
- c语言16qam,基于FPGA的高阶QAM调制器的实现
- ShuffleNet神经网络
- 计算机论文档案初探,[电子档案管理论文:档案计算机管理技术人才培训工作初探.doc...
- excel如何随机生成不重复的数字
- linux开源游戏_适用于Linux的5个开源策略和模拟游戏
- 串口调试助手(CM野人版)4.0有严重Bug,已经跟作者反应,等候更新
- 基于PLC的智能化远程养殖监控系统
- img标签的大小自适应
- 西门子KTP二代精简触摸屏点击无反应,触摸失效的处理对策
- 打开excel提示损坏的映像的解决办法
- java的博_小博老师解析Java核心技术 ——I/O流
- 地震发生时,我们如何避震自救?
- 中国菜刀能在linux上运行吗,【Web Shell】- 技术剖析中国菜刀
- 微信公众平台测试账号的获取及开发使用【微信开发学习】