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)

posted @ 2021-01-07 13:13  北京测试菜鸟  阅读(2248)  评论(0编辑  收藏  举报