Python利用jmespath模块进行json数据处理
本文介绍Python中jmespath第三方模块的安装与使用。通过导入模块并调用search函数,演示如何对单层、多层嵌套JSON及数组数据进行查询。涵盖键值提取、数组下标访问、切片操作及通配符[*]的高级用法,帮助开发者高效处理复杂JSON数据结构。
jmespath模块安装与导入
jmespath是一个Python第三方扩展模块,使用前需单独安装。该模块在Python原生json处理功能的基础上进行了增强。
它显著提升了数据处理的便捷性,具体效果可通过后续示例直观感受。
下面直接开始介绍具体用法。
作为第三方库,首先需要通过pip命令完成安装。
pip install jmespath
安装完成后,在代码中导入该模块即可使用。
import jmespath as jp
search函数基础用法
jmespath核心函数为search,无论JSON结构多么复杂,该函数均能定位目标数据。这一设计极大简化了开发流程。
首先准备一个最简单的JSON数据,其层级仅为一层。
json_data1 = {"name": "Python 集中营", "age": "10年"}
res = jp.search("name", json_data1)
print(res)
# Python 集中营
多层级与数组数据查询
对于多级嵌套的JSON数据,可以通过key1.key2.key3的方式逐层获取对应的value值。
json_data2 = {"names": {"name": "Python 集中营", "age": "5年"}}
res = jp.search("names.name", json_data2)
print(res)
# Python 集中营
针对JSON中的数组形式,支持通过数组下标方式获取特定value值。
json_data3 = ['Python 集中营', 'Sir.wang']
res = jp.search("[0]", json_data3)
print(res)
# Python 集中营
当JSON数据同时包含数组和字典结构时,可以组合使用多种查找方式。例如处理如下JSON数据:
json_data4 = {
"key1": {"key1_1": "value1_1"},
"key2": {"key2_1": ["a", "b", "c"]}
}
复杂JSON处理与切片操作
面对稍复杂的JSON结构,建议先定义好表达式字符串,最后再调用search函数执行查找。例如需要在JSON中找到指定的数组:
# ["a", "b", "c"]
exp = "key2.key2_1[0]"
res = jp.search(exp, json_data4)
print("数组中的数值:", res)
# 数组中的数值:a
此外,jmespath也支持通过切片方式获取所需JSON数据。
json_data5 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
exp = "[0:7]"
res = jp.search(exp, json_data5)
print("切片数据结果", res)
# 切片数据结果 [0, 1, 2, 3, 4, 5, 6]
通配符与高级匹配技巧
另一种查找方式是利用*符号作为通配符,主要适用于外层数据为数组的JSON结构。例如存在如下数据:
json_data6 = {
"data": [
{"name": "Python 集中营", "age": "5年"},
{"name": "Sir.wang", "age": "28"},
{"dr": "nrg"}
]
}
针对此类数据结构,表达式可编写为:先定位data键,使用data[*]获取data下的所有数据,再通过下一层级的键进行匹配。
exp = "data[*].name"
res = jp.search(exp,json_data6)
print(res)
# ['Python 集中营', 'Sir.wang']
若需匹配到的键为dr,则将exp表达式修改为如下形式即可实现查找:
exp = "data[*].dr"
# 查找的结果则是下面这样的...
# ['nrg']关于Python利用jmespath模块处理JSON数据的介绍到此结束。如需了解更多Python JSON数据处理相关内容,可搜索本站历史文章或继续浏览后续文章,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









