"""
jsonpath方法需要两个参数
参数1:数据
参数2:jsonpath表达式
注意点:
1、如果没有匹配到数据返回的是False
2、匹配到数据返回的是包含数据的列表
jsonpath表达式语法
$ ----> 根节点
. ----> 选择直接子节点
.. ----> 选择子孙节点(不考虑层级)
[] ----> 选择子节点/ 选择数组索引
[,] ----> 选择多个字段
@ ----> 代表当前选中的节点(和条件过滤一起使用)
[?(过滤条件)] ----> 通过条件过滤数据
"""
from jsonpath import jsonpath
data = {'code': 200,
'data': [
{'photo': 'https://static-image.xfz.cn/1454046552_487.png',
'create_time': '2016-01-29 13:49:13',
'link': 'http://www.ehoutai.com/',
'uid': 7,
'name': '易后台'},
{'photo': 'https://static-image.xfz.cn/1454046135_474.png',
'create_time': '2016-01-29 13:42:15',
'link': 'http://www.sanjieke.com/',
'uid': 4,
'name': '三节课'},
{'photo': 'https://static-image.xfz.cn/1454046053_122.png',
'create_time': '2016-01-29 13:40:53',
'link': 'https://www.aliyun.com/',
'uid': 1,
'name': '阿里云'},
{'photo': 'https://static-image.xfz.cn/1454047318_361.png',
'create_time': '2016-01-29 14:01:59',
'link': 'http://xmanlegal.com/',
'uid': 8,
'name': '未来法律'}
]}
data2 = {
"code": 0,
"msg": "OK",
"data": {
"id": 177023485,
"leave_amount": 414158,
"mobile_phone": "13367815484",
"reg_name": "cyy",
"reg_time": "2020-12-17 20:20:04.0",
"type": 1,
"token_info": {
"token_type": "Bearer",
"expires_in": "2020-12-17 21:00:32",
"token": "eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjE3NzAyMzQ2OTUsImV4cCI6MTYwODIxMDAzMn0.svdkPs29B826O-Q8AsY897mnfHtjCFFdiH9-HXs_Td3NAjo8rEal1JF332QXfQ6h5me0GwOR1yMifQyLRVZwnA"
}
},
"copyright": "All Rights Reserved"
}
print("""1、选择子节点""")
print(jsonpath(data2,"$.msg"))
print(""" 2、选择子孙节点(不考虑层级)""")
print(jsonpath(data2,"$..token"))
print(""" 3.1、通过索引选择数组(列表中的数据)""")
print(jsonpath(data,"$.[code]")) # 选择子节点
print(jsonpath(data,"$.data[2]")) #选择数组索引,针对列表(数据)
print(""" 3.2 [,] ----> 选择多个字段""")
print(jsonpath(data,"$.data[2][create_time,name,uid]"))
print(""" 3.3.1 通过条件过滤 """)
print(jsonpath(data,"$.data[?(@.uid==8)]"))
print(jsonpath(data,"$..[?(@.uid==8)]"))
print(""" 3.3.2 取过滤后数据的值 """)
print(jsonpath(data,'$.data[?(@.uid==8)].name'))
print(jsonpath(data,'$..[?(@.uid==8)].name'))
print(""" 4、取同个键所有值 """)
print(jsonpath(data,'$..name'))
控制台输出结果如下:
1、选择子节点
['OK']
2、选择子孙节点(不考虑层级)
['eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjE3NzAyMzQ2OTUsImV4cCI6MTYwODIxMDAzMn0.svdkPs29B826O-Q8AsY897mnfHtjCFFdiH9-HXs_Td3NAjo8rEal1JF332QXfQ6h5me0GwOR1yMifQyLRVZwnA']
3.1、通过索引选择数组(列表中的数据)
[200]
[{'photo': 'https://static-image.xfz.cn/1454046053_122.png', 'create_time': '2016-01-29 13:40:53', 'link': 'https://www.aliyun.com/', 'uid': 1, 'name': '阿里云'}]
3.2 [,] ----> 选择多个字段
['2016-01-29 13:40:53', '阿里云', 1]
3.3.1 通过条件过滤
[{'photo': 'https://static-image.xfz.cn/1454047318_361.png', 'create_time': '2016-01-29 14:01:59', 'link': 'http://xmanlegal.com/', 'uid': 8, 'name': '未来法律'}]
[{'photo': 'https://static-image.xfz.cn/1454047318_361.png', 'create_time': '2016-01-29 14:01:59', 'link': 'http://xmanlegal.com/', 'uid': 8, 'name': '未来法律'}]
3.3.2 取过滤后数据的值
['未来法律']
['未来法律']
4、取同个键所有值
['易后台', '三节课', '阿里云', '未来法律']
Process finished with exit code 0