1. 程式人生 > 實用技巧 >python jsonpath 語法總結

python jsonpath 語法總結

因為是第三方庫,需要我們安裝三方庫

pip install jsonpath

# -*- coding:utf-8 -*-
"""
============================
Author : wen
Time : 2021/1/7 12:20
Email : [email protected]
============================
"""

from jsonpath import jsonpath

"""
jsonpath方法需要兩個引數:
引數1:資料
引數2:jsonpath表示式

注意點:
1.如果沒有匹配不到資料返回的是False
2.匹配到資料返回的是包含資料的列表

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': 10006043,
'leave_amount': -422500.0,
'mobile_phone': '13449960188',
'reg_name': '小可愛',
'reg_time': '2021-01-01 22:03:39.0',
'type': 1,
'token_info':
{'token_type': 'Bearer',
'expires_in': '2021-01-07 12:32:52',
'token': 'eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjEwMDA2MDQzLCJleHAiOjE2MDk5OTM5NzJ9.W_wi-NFjJMa3NZF9BOv_j0DvdSRhP7ncMrLfDdpM7HPpW01Afh7Gn6MAQXAFsS0Wge2BUlXAxLNTEv2RO3w-Ow'}},
'copyright': 'Copyright 哈哈 © 2017-2020 xx技術有限公司 All Rights Reserved'
}
token = jsonpath(data2, "$..token")
print(token)

# 選擇子節點
code = jsonpath(data2, "$.code") # == jsonpath(data2, "$[code]")
print(code)

# 通過索引選擇列表中的資料
code = jsonpath(data, "$.data[0]") # == jsonpath(data, "$[data][0]")
print(code)
code1 = jsonpath(data, "$.data[1].name") # == jsonpath(data, "$.data[1][name]")
print(code1)

# 選擇多個欄位
code2 = jsonpath(data, "$.data[1][name,link,]") # == jsonpath(data, "$.data[1].name,link")
print(code2)
code3 = jsonpath(data2, "$.data[id,mobile_phone,type]") # == jsonpath(data2, "$.data.[id,mobile_phone,type]")
print(code3)

# 通過過濾條件
res1 = jsonpath(data, "$.data[?(@.uid==4)]") # == jsonpath(data, "$[data][?(@.uid==4)].name")
print(res1)
res2 = jsonpath(data, "$.data[?(@.uid==4)][name]") # == jsonpath(data, "$.data[?(@.uid==4)].name")
print(res2)