一、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. 基础用法的更多相关文章

  1. PropertyGrid控件由浅入深(二):基础用法

    目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...

  2. logstash安装与基础用法

    若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...

  3. elasticsearch安装与基础用法

    来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...

  4. BigDecimal最基础用法

    BigDecimal最基础用法 用字符串生成的BigDecimal是不会丢精度的. 简单除法. public class DemoBigDecimal { public static void mai ...

  5. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  6. Smarty基础用法

    一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...

  7. 前端自动化测试神器-Katalon的基础用法

    前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...

  8. Bootstrap fileinput:文件上传插件的基础用法

    官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...

  9. asyncio 基础用法

    asyncio 基础用法 python也是在python 3.4中引入了协程的概念.也通过这次整理更加深刻理解这个模块的使用 asyncio 是干什么的? asyncio是Python 3.4版本引入 ...

  10. oracle入坑日记<六>自增列创建和清除(含序列和触发器的基础用法)

    0   前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. ...

随机推荐

  1. Centos8最小化部署安装OpenStack Ussuri

    #!/bin/bash #Centos8最小化部署安装OpenStack Ussuri #共两台主机,分别是一台控制节点,一台计算节点 #.控制节点内存4096M.双网卡,分别为eth0:10.0.0 ...

  2. ios textView跟随键盘的移动

    实现效果: textview 能够跟随键盘的移动而移动 效果图如下: 下边贴上主要的代码: 1.创建textview @interface ViewController ()<UITextVie ...

  3. Python configparser模块操作代码实例

    1.生成配置文件 ''' 生成配置文件 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知 ...

  4. Python创建进程、线程的两种方式

    代码创建进程和线程的两种方式 """ 定心丸:Python创建进程和线程的方式基本都是一致的,包括其中的调用方法等,学会一个 另一个自然也就会了. "" ...

  5. C#LeetCode刷题-线段树

    线段树篇 # 题名 刷题 通过率 难度 218 天际线问题   32.7% 困难 307 区域和检索 - 数组可修改   42.3% 中等 315 计算右侧小于当前元素的个数   31.9% 困难 4 ...

  6. Java字符串中有多少个字符多少个char、字节

    Java 中Char是两个字节,Char在Java中也被称为代码单元(Code Unit) . Java中的字符与代码点(Code Unit)一 一对应,而可能对应一个或者两个 代码单元 字符串的le ...

  7. Redis设计与实现——多机数据库的实现

    复制 旧版Redis的复制功能分为同步(sync)和命令传播两个操作. sync:是一个非常耗费资源的操作                                           命令传播 ...

  8. jupyter 安装 卸载 包

    # 安装 !pip install 库名 # 卸载 !pip uninstall 库名 -y

  9. MIT 6.828 | JOS | 关于虚拟空间和物理空间的总结

    Question: 做lab过程中越来越迷糊,为什么一会儿虚拟地址是4G 物理地址也是4G ,那这有什么作用呢? 解决途径: 停下来,根据当前lab的进展,再回头看上学期操作系统的ppt & ...

  10. SparkStreaming概述

    Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理. ◆ 支持从多种数据源获取数据,包括Kafka.Flume.Twitter.Zer ...