【jmespath】—1. 基础用法
一、jsonpath
之前我写接口自动化测试时候,对于复杂的json返回,会使用jsonpath这个第三方库,就像写xpath一样,方便的查询json元素。
因为之前写WEB自动化时候,总用xpath去查找元素,所以用起来非常顺手。
这里是github上的链接,感兴趣的童鞋也可以去学习一下:jsonpath
二、jmespath
不过httprunner使用的是另一个第三方库jmespath,这个我还是第一次听。大概看了下好像也很不错,这里是github链接和官方教程。
github地址
官方教程
1. 基础表达式
①. 对于字典,可以直接输入key来获取到对应的value。(注意,search是jmespath提供的查询方法,第一个参数是查询语法,第二个则是要查询的数据)
import jmespath
dic_1 = {"a": "foo", "b": "bar", "c": "baz"}
path = jmespath.search("a", dic_1)
print(path)
#运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
foo
如果索引的key不存在,那么会返回null,或者等效于null的语言,比如在Python中返回就是None。
import jmespath
dic_1 = {"a": "foo", "b": "bar", "c": "baz"}
path = jmespath.search("d", dic_1)
print(path)
#运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
None
②. 实际中接口的返回值很多是多层嵌套的,比如我要获取最里面一层的value,可以这样查询:
import jmespath
dic_1 = {"a": {"b": {"c": {"d": "value"}}}}
path = jmespath.search("a.b.c.d", dic_1)
print(path)
#运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
value
同样,如果引用的键不存在,则返回null值。
2. 切片
①. 对于一个列表[],可以直接用下标查询,类似于python中list元素访问。(注意,索引基于0开始的)
import jmespath
# dic_1 = {"a": {"b": {"c": {"d": "value"}}}}
list_1 = ["a", "b", "c", "d", "e", "f"]
path = jmespath.search("[1]", list_1)
print(path)
#运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
b
②. 字典和列表的嵌套也非常常见,同样查询也可以组合使用:
import jmespath
dic_1 = {"a": {
"b": {
"c": [
{"d": [0, [1, 2]]},
{"d": [3, 4]}
]
}
}}
path = jmespath.search("a.b.c[0].d[1][0]", dic_1)
print(path)
#运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
1
③. 列表的切片操作,在这里也可以适用:
import jmespath
dic_1 = {"a": {
"b": {
"c": [
{"d": [0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]},
{"d": [3, 4]}
]
}
}}
path = jmespath.search("a.b.c[0].d[1][5:10]", dic_1)
print(path)
#运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
[5, 6, 7, 8, 9]
如果切片参数里的步长是负数,则可以反向切片:
import jmespath
dic_1 = {"a": {
"b": {
"c": [
{"d": [0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]},
{"d": [3, 4]}
]
}
}}
path = jmespath.search("a.b.c[0].d[1][::-2]", dic_1)#步长是负数
print(path)
#运行结果
D:\Daily\whatisyeild>python jmespath_demo.py
[9, 7, 5, 3, 1]
上面是一些常规的用法,但是jmespath还提供了一个更强大的核心功能:Projections,可以应用于元素集合的表达式,这个另起再讲。
【jmespath】—1. 基础用法的更多相关文章
- PropertyGrid控件由浅入深(二):基础用法
目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...
- logstash安装与基础用法
若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...
- elasticsearch安装与基础用法
来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...
- BigDecimal最基础用法
BigDecimal最基础用法 用字符串生成的BigDecimal是不会丢精度的. 简单除法. public class DemoBigDecimal { public static void mai ...
- Vue组件基础用法
前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...
- Smarty基础用法
一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...
- 前端自动化测试神器-Katalon的基础用法
前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...
- Bootstrap fileinput:文件上传插件的基础用法
官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...
- asyncio 基础用法
asyncio 基础用法 python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? asyncio是Python 3.4版本引入 ...
- oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)
0 前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...
随机推荐
- Centos8最小化部署安装OpenStack Ussuri
#!/bin/bash #Centos8最小化部署安装OpenStack Ussuri #共两台主机,分别是一台控制节点,一台计算节点 #.控制节点内存4096M.双网卡,分别为eth0:10.0.0 ...
- ios textView跟随键盘的移动
实现效果: textview 能够跟随键盘的移动而移动 效果图如下: 下边贴上主要的代码: 1.创建textview @interface ViewController ()<UITextVie ...
- Python configparser模块操作代码实例
1.生成配置文件 ''' 生成配置文件 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知 ...
- Python创建进程、线程的两种方式
代码创建进程和线程的两种方式 """ 定心丸:Python创建进程和线程的方式基本都是一致的,包括其中的调用方法等,学会一个 另一个自然也就会了. "" ...
- C#LeetCode刷题-线段树
线段树篇 # 题名 刷题 通过率 难度 218 天际线问题 32.7% 困难 307 区域和检索 - 数组可修改 42.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 4 ...
- Java字符串中有多少个字符多少个char、字节
Java 中Char是两个字节,Char在Java中也被称为代码单元(Code Unit) . Java中的字符与代码点(Code Unit)一 一对应,而可能对应一个或者两个 代码单元 字符串的le ...
- Redis设计与实现——多机数据库的实现
复制 旧版Redis的复制功能分为同步(sync)和命令传播两个操作. sync:是一个非常耗费资源的操作 命令传播 ...
- jupyter 安装 卸载 包
# 安装 !pip install 库名 # 卸载 !pip uninstall 库名 -y
- MIT 6.828 | JOS | 关于虚拟空间和物理空间的总结
Question: 做lab过程中越来越迷糊,为什么一会儿虚拟地址是4G 物理地址也是4G ,那这有什么作用呢? 解决途径: 停下来,根据当前lab的进展,再回头看上学期操作系统的ppt & ...
- SparkStreaming概述
Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理. ◆ 支持从多种数据源获取数据,包括Kafka.Flume.Twitter.Zer ...