官方文档 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

总结
- 方括号里面是问号加筛选条件(注意对应值的类型),
- 点后面是取对应的键值对的值,
- 取别名用大括号,
- 嵌套条件筛选用管道符接再次筛选的条件,
- 取的是列表记得后面跟方括号,才能继续用点取键值
- 取的是键值直接点加键就好,不需要方括号
- 引号用单引号
踩过的坑
- 比较运算符需要注意两个表达式的值类型,不能比较的类型放在一起会报错
- 表达式中需要注意单双引号对应,否则可能会定位不到值

583

被折叠的 条评论
为什么被折叠?



