jmespath是python的第三方模块,是需要额外安装的。它在python原有的json数据处理上
做出了很大的贡献,至于效果接下来试试就知道了有多方便。
话不多说,我们直接进入正题…
既然是第三方的库,那肯定是要安装的。通过pip的方式先将jmespath库安装好…
1
|
pip install jmespath |
将安装好的模块导入到代码块中…
1
|
import jmespath as jp |
jmespath中有一个很重要、很方便的函数那就是search,不管你的json数据有多么变态,它都能给你找到。写出这个框架的大佬也是费心了…
我先准备了一个最简单的json数据结构的数据,数据层级为1。
1
2
3
4
5
6
7
|
json_data1 = { "name" : "Python 集中营" , "age" : "10年" } res = jp.search( "name" , json_data1) print (res) # Python 集中营 |
如果是多级的json数据,可以使用key1.key2.key3的方式来获取value值。
1
2
3
4
5
6
7
|
json_data2 = { "names" : { "name" : "Python 集中营" , "age" : "5年" }} res = jp.search( "names.name" , json_data2) print (res) # Python 集中营 |
既然是针对json数据的处理,那肯定也是支持数组形式的查找的。对于json数据的数组形式的查找,主要是通过数组下标的方式来获取数据value值的。
1
2
3
4
5
6
7
|
json_data3 = [ 'Python 集中营' , 'Sir.wang' ] res = jp.search( "[0]" , json_data3) print (res) # Python 集中营 |
若是数组和字典的形式结合组成的json数据,也可以组合使用查找方式。比如:有如下的json数据…
1
2
3
4
|
json_data4 = { "key1" : { "key1_1" : "value1_1" }, "key2" : { "key2_1" : [ "a" , "b" , "c" ]} } |
面对稍微复杂一点的json数据可以先定义好表达式的字符串,最后再使用search函数进行数据查找。比如:需要在json数据中找到如下的数组…
1
2
3
4
5
6
7
8
9
|
# ["a", "b", "c"] exp = "key2.key2_1[0]" res = jp.search(exp, json_data4) print ( "数组中的数值:" , res) # 数组中的数值:a |
那么,如何在json数据中使用切片的方式来找到需要的json数据,当然也是支持的…
1
2
3
4
5
6
7
8
9
|
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数据中,比如有如下的数据…
1
2
3
4
5
6
7
|
json_data6 = { "data" : [ { "name" : "Python 集中营" , "age" : "5年" }, { "name" : "Sir.wang" , "age" : "28" }, { "dr" : "nrg" } ] } |
这种数据形式的话,表达式可以这样写。先找到data作为键,这个时候是用data[*]就可以找到data下面的所有数据,在通过下一个层级的键进行匹配。
1
2
3
4
5
6
7
|
exp = "data[*].name" res = jp.search(exp,json_data6) print (res) # ['Python 集中营', 'Sir.wang'] |
若是想匹配到的键是dr,则将exp表达式修改成下面这样就可以找到了…
1
2
3
4
5
|
exp = "data[*].dr" # 查找的结果则是下面这样的... # ['nrg'] |
到此这篇关于Python利用jmespath模块进行json数据处理的文章就介绍到这了,更多相关Python json数据处理内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/lwsbc/p/16046819.html