python jsonpath 语法总结
因为是第三方库,需要我们安装三方库
pip install jsonpath
from jsonpath import jsonpath
jsonpath方法需要两个参数:
参数1:数据
参数2:jsonpath表达式
注意点:
1.如果没有匹配不到数据返回的是False
2.匹配到数据返回的是包含数据的列表
jsonpath语法:
$ -----------> 根节点
. -----------> 选择子节点
.. -----------> 选择子孙节点(不考虑层级)
[] -----------> 选择子节点/选择数组索引
[,] -----------> 选择多个字段
@ -----------> 代表当前选中的节点(和条件过滤一起使用)
[?(过滤条件)] ------------> 通过条件过滤数据
* ------------> 通配符,表示匹配所有
1 data = {'code': 200, 2 'data': [ 3 {'photo': 'https://static-image.xfz.cn/1454046552_487.png', 'create_time': '2016-01-29 13:49:13', 4 'link': 'http://www.ehoutai.com/', 'uid': 7, 'name': '易后台'}, 5 {'photo': 'https://static-image.xfz.cn/1454046135_474.png', 'create_time': '2016-01-29 13:42:15', 6 'link': 'http://www.sanjieke.com/', 'uid': 4, 'name': '三节课'}, 7 {'photo': 'https://static-image.xfz.cn/1454046053_122.png', 'create_time': '2016-01-29 13:40:53', 8 'link': 'https://www.aliyun.com/', 'uid': 1, 'name': '阿里云'}, 9 {'photo': 'https://static-image.xfz.cn/1454047318_361.png', 'create_time': '2016-01-29 14:01:59', 10 'link': 'http://xmanlegal.com/', 'uid': 8, 'name': '未来法律'}]} 11 12 data2 = {'code': 0, 13 'msg': 'OK', 14 'data': 15 {'id': 10006043, 16 'leave_amount': -422500.0, 17 'mobile_phone': '13449960188', 18 'reg_name': '小柠檬', 19 'reg_time': '2021-01-01 22:03:39.0', 20 'type': 1, 21 'token_info': 22 {'token_type': 'Bearer', 23 'expires_in': '2021-01-07 12:32:52', 24 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjEwMDA2MDQzLCJleHAiOjE2MDk5OTM5NzJ9.W_wi-NFjJMa3NZF9BOv_j0DvdSRhP7ncMrLfDdpM7HPpW01Afh7Gn6MAQXAFsS0Wge2BUlXAxLNTEv2RO3w-Ow'}}, 25 'copyright': 'Copyright Abby © 2017-2020 腾讯公司 All Rights Reserved' 26 } 27 28 token = jsonpath(data2, "$..token") 29 print(token) 30 31 # 选择子节点 32 code = jsonpath(data2, "$.code") # == jsonpath(data2, "$[code]") 33 print(code) 34 35 # 通过索引选择列表中的数据 36 code = jsonpath(data, "$.data[0]") # == jsonpath(data, "$[data][0]") 37 print(code) 38 code1 = jsonpath(data, "$.data[1].name") # == jsonpath(data, "$.data[1][name]") 39 print(code1) 40 41 # 选择多个字段 42 code2 = jsonpath(data, "$.data[1][name,link,]") # == jsonpath(data, "$.data[1].name,link") 43 print(code2) 44 code3 = jsonpath(data2, "$.data[id,mobile_phone,type]") # == jsonpath(data2, "$.data.[id,mobile_phone,type]") 45 print(code3) 46 47 # 通过过滤条件 48 res1 = jsonpath(data, "$.data[?(@.uid==4)]") # == jsonpath(data, "$[data][?(@.uid==4)].name") 49 # print(jsonpath(data, "$.data[?(@.name=='阿里云')]")) 50 print(res1) 51 res2 = jsonpath(data, "$.data[?(@.uid==4)][name]") # == jsonpath(data, "$.data[?(@.uid==4)].name") # == jsonpath(data, "$[data][?(@.uid==4)].name") 52 # print(jsonpath(data, "$.data[?(@.uid > 7)][name]")) 53 print(res2)