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全量字段校验相关推荐

  1. Python +大数据-知行教育(四)-意向用户主题看板_全量流程

    Python +大数据-知行教育(四)-意向用户主题看板_全量流程 5. 意向用户主题看板_全量流程 5.1 需求分析 主要分析什么内容:1) 每一个需求涉及到那些维度, 那些直白2) 每一个需求涉及 ...

  2. Python实现目录文件的全量和增量备份

    目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...

  3. python 读取文件夹 增量文件_Python实现目录文件的全量和增量备份

    目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...

  4. python 爬取全量百度POI

    在网上找了很多关于爬取百度POI的文章,但是对"全量"的做法并没有得到最终的解决方案,自己写了一个,但还是不能实现全量POI抓取,能够达到至少50%的信息抓取. 注意:这里所指&q ...

  5. python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...

    2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...

  6. toastutils报错_史上最好用的Android全量版本更新库XUpdate使用指南

    在这里插入图片描述 项目简介XUpdate是一个轻量级.高可用性的Android全量版本更新框架. XUpdate是为了解决在不同项目组.不同平台之间进行统一的Android全量版本更新的库.它具有轻 ...

  7. lucene 增量 全量 更新索引_10年+,阿里沉淀出怎样的搜索引擎?

    阿里妹导读:搜索引擎是阿里的10年+沉淀,具有很高的技术/业务/商业价值.1688很多场景都借助了搜索中台的能力,基于此,以1688主搜为例介绍搜索全链路知识点,希望对你有所借鉴,有所启发. 一.整体 ...

  8. python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)

    python 全栈开发,Day104(DRF用户认证,结算中心,django-redis) 考试第二部分:MySQL数据库 6.  MySQL中char和varchar的区别(1分) char是定长, ...

  9. python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)

    python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性) 昨日内容回顾 1.app播放音乐plus.audio.createPlayer(文件路径/URL)player.play( ...

最新文章

  1. Nature:13个维度,手把手教“研究er”如何做报告
  2. python存储numpy数据为文件_numpy.savetxt是否将数组保存到文件中的特定位置?
  3. PPIO 商业化架构解析
  4. VTK:图片之ImageMask
  5. inuri .php id=,php常用函数(遇见就补充)
  6. python importlib_学习python importlib的导入机制
  7. c语言16qam,基于FPGA的高阶QAM调制器的实现
  8. ShuffleNet神经网络
  9. 计算机论文档案初探,[电子档案管理论文:档案计算机管理技术人才培训工作初探.doc...
  10. excel如何随机生成不重复的数字
  11. linux开源游戏_适用于Linux的5个开源策略和模拟游戏
  12. 串口调试助手(CM野人版)4.0有严重Bug,已经跟作者反应,等候更新
  13. 基于PLC的智能化远程养殖监控系统
  14. img标签的大小自适应
  15. 西门子KTP二代精简触摸屏点击无反应,触摸失效的处理对策
  16. 打开excel提示损坏的映像的解决办法
  17. java的博_小博老师解析Java核心技术 ——I/O流
  18. 地震发生时,我们如何避震自救?
  19. 中国菜刀能在linux上运行吗,【Web Shell】- 技术剖析中国菜刀
  20. 微信公众平台测试账号的获取及开发使用【微信开发学习】

热门文章

  1. ros和carla的联合
  2. Go语言框架Gin之4 安全认证
  3. 关于comparator升序、降序
  4. 《中国垒球》:跨界联赛·完美落幕
  5. 用angr找到strcpy的栈溢出漏洞
  6. 四阶龙格库塔法的基本思想_利用龙格库塔法求解郎之万方程.doc
  7. 进程、线程、程序的概念与区别
  8. lan口和wan口的配置
  9. 技术新领导人张小龙:一些成功不能复制
  10. Filecoin与以太坊结合开启Web3.0丨Filecoin是唯一可信存储