Python:jsonpath库介绍和使用

导言:一般场景下,我们使用Python的内置json库,就能完成大部分的解析和处理JSON格式。

Python内置库编码和解码 JSON 对象 - json

简介:JsonPath 对于 JSON 来说,相当于 XPath 对于 XML,用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。

官方文档:

http://goessner.net/articles/JsonPath

pip安装:

pip install jsonpath

使用案例:
1、模糊匹配
2、不存在匹配的结果
3、只匹配出单个结果
4、取某个数据的原始方法

import jsonpath

relation = [
    {'id': 1, 'label': 'a1', 'children': [], "age": 20},
    {'id': 2, 'label': 'a2', 'children': [{'id': 3, 'label': 'a3',
                                           'children': [
                                               {'id': 4, 'label': 'a4', 'children': []},
                                               {'id': 5, 'label': 'a5',
                                                'children': [
                                                    {'id': 7, 'label': 'a7', 'children': []},
                                                    {'id': 8, 'label': 'a8',
                                                     'children': []}]}]},
                                          {'id': 6, 'label': 'a6', 'children': []}]}]

# 嵌套n层也能取到所有标签信息,$表示最外层的{},..表示模糊匹配
# 查找顺序,第一个 > 第一个的子节点,直到没有。
res1 = jsonpath.jsonpath(relation, '$..label')  # ['a1', 'a2', 'a3', 'a4', 'a5', 'a7', 'a8', 'a6']
res2 = jsonpath.jsonpath(relation, '$..id')  # [1, 2, 3, 4, 5, 7, 8, 6]
res3 = jsonpath.jsonpath(relation, '*.id')  # [1, 2]  匹配所有元素节点
print(res1)
print(res2)
print(res3)

# 如果不存在匹配的结果,则返回 False
res4 = jsonpath.jsonpath(relation, '$..name')
print(res4)

# 如果只匹配出单个结果,依然会放入一个列表
res5 = jsonpath.jsonpath(relation, '$..age')  # [20]
print(res5)

# 取某个数据的原始方法:通过查找字典中的key以及list方法中的下标索引
res6 = relation[1]["children"][0]["children"][1]["label"]
print(res6)  # a5

遍历的顺序:深度优先遍历
图片

PS1:二叉树的深度遍历
沿着树的深度遍历结点,尽可能深的搜索树的分支。如果当前的节点所在的边都被搜索过,就回溯到当前节点所在的那条边的起始节点。一直重复直到进行到发现源节点所有可达的节点为止。
在这里插入图片描述
在这里插入图片描述

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值