python(四)jsonpath的使用

"""
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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值