【jmespath】—1. 基础用法

简介: 【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,可以应用于元素集合的表达式,这个另起再讲。

相关文章
|
11天前
|
安全 数据安全/隐私保护
RememberMe简介及用法
RememberMe简介及用法
18 0
RememberMe简介及用法
|
3月前
分析它们的用法与区别
【8月更文挑战第31天】分析它们的用法与区别。
44 1
|
5月前
|
安全 API Windows
CreateMutex用法
CreateMutex用法
|
6月前
|
安全 C#
c#学习相关系列之as和is的相关用法
c#学习相关系列之as和is的相关用法
|
存储 API 索引
CImageList用法介绍
CImageList用法介绍
174 0
|
Windows
基础用法
基础用法
101 0
|
前端开发 JavaScript
Validform基础及用法
Validform基础及用法
298 0
Validform基础及用法
|
C# 容器 数据格式
AvalonDock的基本用法
原文:AvalonDock的基本用法         AvalonDock是优秀的开源项目,用于创建可停靠式布局,能够在WPF中方便开发出类似VS2010的软件界面。对于复杂的软件系统,大量控件的使用会使的界面变得难以管理。
2179 0
c 高级函数的简单用法
c 中内置了很多高级的函数,我们先使用排序函数看一下 1 #include 2 #include 3 #include 4 5 int compare_score(const void *n1 ,const void *n2) { 6 7 int *a =...
886 0