官方文档 JMESPath Tutorial — JMESPath,可以直接copy对应的json输入条件筛选
使用
import jmespath # mespath.search(查找内容,查找数据) data = { "name": "Let", "age": 13, "gender": "femeal" } search_cond = '{NAME:name,AGE:age}' result = jmespath.search(search_cond, data) print(result)
取键值 - .
列表取值 - []
列表切片(同python)
通配符*及模糊取值
非递归单列表展开
只是将结果中的一级列表展开,内层嵌套列表不会展开
对比:
管道表达式 - | (相当于括号)
即匹配结果中再次筛选
多选列表
键值起别名(多选哈希)
{ 别名 : 对应键的表达式 },只能是对键值别名,列表不适用,注意是大括号
- name别名NAME,state别名STATE
- b起别名ooo
- 结果集别名ooo
数据类型
- 字符串 ------ 单引号 ------ ''
- 数字 -------- 右点 ----- ` 注意不是引号,是tab键上面的那个
- 空 ---------- 右点包含null ------ `null`
运算符
- 比较运算符
== != < <= > >=
- 逻辑运算符
或 || 与 && 非 !
- 其他
管道 |
条件过滤
[?比较表达式]
- 数字
- 字符串
- null
函数
- length(结果集),注意不是len
- max_by(<父级元素>, &<比较值的元素>).name
取最大值
- 包含:contains(@, 'foo'),@关联到当前级别的元素值
- 排序:sort_by(contents, &Date)
其他示例
- 只提取值
- 多选哈希提取键和值
3.
4.
5.
6.对比5
总结
- 方括号里面是问号加筛选条件(注意对应值的类型),
- 点后面是取对应的键值对的值,
- 取别名用大括号,
- 嵌套条件筛选用管道符接再次筛选的条件,
- 取的是列表记得后面跟方括号,才能继续用点取键值
- 取的是键值直接点加键就好,不需要方括号
- 引号用单引号
踩过的坑
- 比较运算符需要注意两个表达式的值类型,不能比较的类型放在一起会报错
- 表达式中需要注意单双引号对应,否则可能会定位不到值