jmespath是json的查询语言
可以从json文档中提取和转换元素,类似于jsonpath的另外一个库
 
字典取值
# 一层嵌套取值
{a:1,b:2,c:3}
"""
取a的值:a
"""

# 多层嵌套取值

# 多层嵌套取值
{a:{b:3,c:4,d:{e:1}}}
"""
取a的值:a
取b的值:a.b
取e的值:a.d.e
"""
 
列表通过下标取值
#跟python一样,通过下标取值
[a,b,c,d,e]
"""
取a的值:[0]
"""
字典套列表取值
{a:{
b:{
c:[
{d:[0,[1,2]]},
{e:[3,4]}
]
}
}
}
"""
取d里面为0的值:a.b.c[0].d[0]
取d里面为1的值: a.b.c[0].d[1][0]
"""
切片取值
[0,1,2,3,4,5,6,7]
"""
与python切片一致:启点位置:终点位置:步长
取1~4的值:[1:5]
"""
列表*通配符
{
a:[
{b:1,sss:3},
{c:2,sss:3},
{d:3,sss:3}
]
}
"""
取值列表中所有的key为sss的值:a[*].sss
取出列表中前二个sss对应的值:a[:2].sss
"""
对象*通配符取值
{
ops:{
fcA:{num:1},
fcb:{num:2},
fcc:{sss:2}
}
} """
取出所有包含num的值:ops.*.num
"""
过滤器
过滤器表达式是为数组定义的
一般形式为:[? <表达式><比较器><表达式>]
常用的比较表达式:==,!=,<,<=,>,>=
 
{
lable:[
{name:a,state:run},
{name:b,state:stop},
{name:c,state:run}
]
} """
字符串必须用单引号
假设有3台机器,我们想要拿出所有正在运行的机器的名称
lable[?state=='run'].name """
 
管道|表达式
匹配list里面的多个值的时候,查询的结果是一个list,如果我想取出结果里面的指的的值可以使用管道符
{
a:[
{name:1,sss:3},
{name:2,sss:3},
{name:3,sss:3}
]
}
"""
取出a下面所有对象的name属性,从结果里面取第一个值
a.[*].name |[0]]
"""
 
多选取值
{
a:[
{name:1,state:{sss:3},
{name:2,state:{sss:3},
{name:3,state:{sss:3}
]
}
"""
取出a里面所有的name的值 和sss的值,多个值用逗号隔开
[]是列表所有的值
a.[].[name,state.sss]
"""
取值数量length
{
a:[
{name:1,state:{sss:3},
{name:2,state:{sss:3},
{name:3,state:{sss:3}
]
} """
取出所有的name值,获取name值的数量
length(a.name) """
max_by最大值
{
people:[
{name:a,age:18},
{name:b,age:19},
{name:c,age:29}
]
}
"""
取出age的最大值的name
max_by(people,&age).name
"""
min_by最小值
{
people:[
{name:a,age:18},
{name:b,age:19},
{name:c,age:29}
]
}
"""
取出age的最小值的name
min_by(people,&age).name
"""
 
函数也可以和过滤器表达式组合
@字符表示在对象中正在评估的当前元素,如果包含条件,则返回true
{
myattay:[
foo,
foobar,
bar,
baz
] } """
在myarray中查询包含字符串foo的元素
myarray[?contaisn(@,'foo')==`true`]
"""
 
字符串使用单引号''
数值或其他类型使用``
python中使用jmespath
安装:pip3 install jmespath
search(表达式,数据)
#使用search jmespath表达式提供数据
body = {'code':0,data:[{name:a,age:1},{name:b,age:2}]} import jmespath
#取出code
path = jmespath.search('code',body)
#取出第一个name
path = jmespath.search('data[0].name',body)
#取出name=a的数据
path = jmespath.search("data[?name='a']",body)
#取出年龄大于20的1数量
path = jmespath.search("length(data[?age>`20`])")

6.jmespath表达式的更多相关文章

  1. json jmespath的使用

    在接口测试的过程中,我们经常会接触到json格式respones,我们会经常去做取JSON中某个值的操作,可以用jmespath分析.转换和选择性的提取JSON数据进行操作,功能非常强大,易读. 一. ...

  2. jmespath(1)基础语法

    前言 JMESPath是JSON的查询语言.您可以从JSON文档中提取和转换元素 官方文档:https://jmespath.org/tutorial.html 基本表达式 JMESPath用的最多的 ...

  3. jmespath(2)投影Projections

    投影 投影是JMESPath的关键特性之一.它允许您将表达式应用于元素集合.有五种投影: 列表投影 切片投影 对象投影 展平投影 过滤投影 处理投影需要注意的点 投影评估分为两个步骤.左侧(LHS)创 ...

  4. 【HttpRunner v3.x】笔记—6. 测试用例-teststeps-RunRequest

    之前我们了解了config里的各项参数,今天来了解另一个重要部分--teststeps,在这之前,先看看测试用例的分层模型. 一.测试用例分层模型 一个testcase里(就是一个pytest格式的P ...

  5. JMeter关联陌生又熟悉

    JMeter关联是什么 JMeter关联,这几个字看着可能会有点陌生,实际上却是工作中经常会做的一件事情,尤其是接口自动化,它指的是把一个接口的响应作为另一个接口的参数,从而把接口关联起来. JMet ...

  6. httprunner3.x全网最详细教程

    一.所需环境 wiindows10以上 python3.6以上 httprunner3.1.6(最新版本) pycharm社区版 二.安装httprunner 1.卸载旧版本 卸载之前版本的命令为:p ...

  7. HttpRunner3的变量是如何传递的

    HttpRunner3的变量可以在测试类的用例配置中通过variables添加,也可以在测试步骤中使用extract().with_jmespath()提取出来放到变量x,再用$x传递给下一个接口使用 ...

  8. Promtail Pipeline 日志处理配置

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492144&idx=1&sn=a1cc13a642 ...

  9. 7.httprunner-pytest风格用例

    用例设计原则 py文件名以test_开头或者_test结尾 函数名以test_开头 类名以Test开头,并且不能有init初始化方法 所有的包pakege必须有_init_.py文件   pychar ...

随机推荐

  1. k8s驱逐篇(2)-kubelet节点压力驱逐

    kubelet节点压力驱逐 kubelet监控集群节点的 CPU.内存.磁盘空间和文件系统的inode 等资源,根据kubelet启动参数中的驱逐策略配置,当这些资源中的一个或者多个达到特定的消耗水平 ...

  2. Luogu2543[AHOI2004]奇怪的字符串 (动态规划 LCS)

    04年的省选这么water吗,开个滚动数组算了 #include <iostream> #include <cstdio> #include <cstring> # ...

  3. 浅谈MySQL的sql_mode

    SQL mode 今天我们来分享一下MySQL的SQL mode , 这也是我们比较容易忽略的一点,我们在一开始安装数据库的时候其实就要先考虑要保留哪些SQL mode,去除哪些,合理的配置能够减少很 ...

  4. Python爬虫之xpath语法及案例使用

    Python爬虫之xpath语法及案例使用 ---- 钢铁侠的知识库 2022.08.15 我们在写Python爬虫时,经常需要对网页提取信息,如果用传统正则表达去写会增加很多工作量,此时需要一种对数 ...

  5. (原创)【MAUI】在窗口(页面)关闭后获取其返回值

    一.前言 作为一名 Winform 和 WPF 的老用户,没想到 MAUI 上变化那么大. 就像传统的窗口,我弹出一个模式窗口,关闭窗口后是可以获取到窗口的返回值的,即: DialogResult.后 ...

  6. Minio分布式集群部署——Swarm

    最近研究minio分布式集群部署,发现网上大部分都是单服务器部署,而minio官方在github上现在也只提供了k8s和docker-compose的方式,网上有关与swarm启动minio集群的文章 ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  8. 【java】学习路径27-HashSet、TreeSet,HashMap

    学习路径20-27的所有源代码都可以在此下载 https://www.aliyundrive.com/s/cg8jTRbg6vy HashSet.TreeSet中,Set表示集合,特性在于:无序的.不 ...

  9. 【面试题】js 问号(?)的强大之处,你知道吗??

    问号(?)的强大之处 点击打开视频讲解更加详细 一.问号点(?.) obj: { name: "末晨曦吖", }, console.log(this.obj.age, " ...

  10. KingbaseES R6集群归档备份故障分析解决案例

    案例说明: 在使用ps工具查看主库进程,发现主库'archiver'进程失败,检查sys_log日志可以发现归档失败的信息.通过sys_log日志提取归档语句手工执行归档操作,提示"当前数据 ...