【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 的自增列需要手动编写. ...
随机推荐
- 吴太银:华为消费者云服务Cassandra使用场景与最佳实践
大家好,我是华为消费者云的吴太银. 我今天分享的主要是华为消费者云服务使用Cassandra的应用场景和最佳实践.我这个可能跟其他嘉宾分享的不太一样,因为前几个嘉宾讲的实际上对Cassandra原生的 ...
- linux下的node版本管理利器:nvm
nvm是一款node版本管理工具,简单来说,如果你想在一个环境下安装多个node版本,并向自由地切换相关版本,那你就需要使用nvm进行版本管理,有点类似pyenv,也是一款python版本管理工具. ...
- 网站favicon.ico 图标
favicon.ico一般用于作为缩略的网站图标,它显示在浏览器的地址栏或者标签上.目前主要的浏览器都支持favicon.ico图标. 一.制作favicon图标 1.把图标切成png图片. 2.把p ...
- URLDecoder异常解决方法
URLDecoder对参数进行解码时候,代码如: URLDecoder.decode(param,"utf-8"); 有时候会出现类似如下的错误: URLDecoder异常Ille ...
- 用python爬虫监控CSDN博客阅读量
作为一个博客新人,对自己博客的访问量也是很在意的,刚好在学python爬虫,所以正好利用一下,写一个python程序来监控博客文章访问量 效果 代码会自动爬取文章列表,并且获取标题和访问量,写入exc ...
- Spring Boot自定义错误视图
Spring Boot缺省错误视图解析器 Web应用在处理请求的过程中发生错误是非常常见的情况,SpringBoot中为我们实现了一个错误视图解析器(DefaultErrorViewResolver) ...
- 《java多线程——线程简介与其创建(1)》
Java 给多线程编程提供了内置的支持. 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开 ...
- Python3技巧:动态变量名
Firstly 各位应该做过服务器运维吧,像这样: 那么,在服务器运维的程序中,最好的访问服务器的方式是:运维库名.服务器名 由于服务器名是动态的,所以变量名也是动态的.今天我们就来讲讲Python3 ...
- Linux调用Kaggle API下载数据
1. 登录Kaggle账户,点击My Account 2. Create New API Token得到kaggle.json 3. pip install kaggle 4. 执行kaggle会报错 ...
- Java多线程_生产者消费者模式1
生产者消费者模型 具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品.生产消费者模式如下图.(图片来自网络 ...