第三part:python使用jmespath模块
jmespath.search(expression,data)方法的使用:其中参数expression为表达式,data为json数据。
在接口自动化中,可以使用该方法进行获取json的数据进行断言。
json数据为:
#导包
import jmespath
#返回joson数据中的status中的数据:
get_data=jmespath.search('status',data)
print(get_data)
运行结果:
8.2 通常我们需要的结果是['running', 'stopped', 'terminated', 'running'],只需要一个列表的状态,则使用[],而不是[*]
9.【过滤器使用】
过滤器表达式是数组形式的,其一般形式为
[?<表达式> <比较器> <表达式>]
。
常用的比较表达式可以使用
==
,
!=
,
<
,
<=
,
>
,
> =
9.1如下有一个机器列表,每个机器都有一个名称和一个 state,此时想要所有state为running的计算机的名称,使用表达式:machines[?state=='running'].name
10.【管道表达式】
前面在匹配list里面的多个值时候,查询的结果是一个list,如果需要取出结果里面的第n个可以使用管道符
|
例子:取出people下所有对象的 first 属性,从结果里面取第一个值,使用表达式:
people[*].first | [0]
11.【多选】
多选列表和多选哈希创建JSON元素,可以创建JSON文档中不存在的元素。
多选列表创建一个列表,多选哈希创建一个JSON对象。
例子:取出people属性的name,以及state中的name值,使用表达式:
people[].[name, state.name]
解析:
在上面的表达式中,[name, state.name]部分是一个多选列表。它说要创建一个由两个元素组成的列表,第一个元素是针对list元素评估名称表达式的结果,第二个元素是对state.name评估的结果。因此,每个列表元素将创建一个两个元素列表,并且整个表达式的最终结果是两个元素列表的列表。
多重选择具有与多重选择列表相同的基本概念,不同之处在于它会创建哈希而不是数组。
使用上面的相同示例,如果我们想创建一个具有两个键Name和 State的两个元素哈希,则使用表达式:people[].{Name: name, State: state.name}
12.【函数的使用】
JMESPath支持函数表达式。
12.1 函数可用于以强大的方式转换和过滤数据。可以在此处找到函数的完整列表,并且函数表达式规范具有完整的详细信息。
例子1:在people数组中打印数组的长度,使用表达式:
例子2:在people数组中打印最老的人的名字,使用表达式:max_by(people, &age).name
12.2 函数也可以与过滤器表达式组合。在下面的示例中,JMESPath表达式在myarray中查找包含字符串foo的所有元素。
使用表达式:myarray[?contains(@, 'foo') == `true`]
【解析】:
上面示例中的@字符表示在myarray中正在评估的当前元素。如果myarray数组中的当前元素包含字符串 foo , 则包含(@,’foo’)的表达式将返回 true。
尽管函数表达式规范包含所有详细信息,但在使用函数时,需要牢记以下几点:
函数参数具有类型。如果函数的参数类型错误,则会发生无效类型错误。有一些函数可以进行类型转换(to_string,to_number),以帮助将参数转换为正确的类型。