JMESPath

JMESPath 是查询 JSON 数据的查询语言. 可以快速解析复杂的JSON数据.
https://blog.csdn.net/be5yond/article/details/118976017
https://blog.csdn.net/wessonlan/article/details/124813192
https://blog.csdn.net/weixin_44799217/article/details/127590589

import jmespath

jmespath.search('data[*]/notice_id',json_data)

基本表达式 .

search('key', data)
search('Beta[1]', data)
# 没有的数据 返回None
search('beta[1]', data)
多级数据
search('alpha.one.jia[0].foo[1]', data)

数组切片 :

数组类型的数据, 支持向python一样格式的切片方式[start:end:step].

原始数据 [0]
[]
[*]
[::]
[5:10]
[::-1]
[8:1:-2]

通配符 *


jmespath.search('alpha.*', data)

#获取数据里的所有id
.search('data[*].id',data)

管道符 |

jmespath 中的管道符作用和shell命令中的作用一样, 将前一个表达式返回的结果作为后一个表达式的输入进行计算.

search('*.two | [0]', data)

多字段提取 []

通过使用 多选列表[] 和多选hash , 可以创建 原始JSON数据不存在的 元素

search('people[].[name, state.name]', data)
在上面的表达式中,[name, state.name]部分是一个多选列表。它要创建一个包含两个元素的列表,第一个元素是name表达式的结果,第二个元素是state.name的结果。

search('people[].{new_name: name, state_name: state.name}', data)
#在上面的表达式中,{new_name: name, state_name: state.name}部分是一个多选字典。它要创建一个包含两个元素的字典,第一个元素key是'new_name', value是name表达式的结果,第二个元素key是'state_name', value是state.name的结果。