解析python中的jsonpath提取器代码示例

作者:袖梨 2022-06-25

本篇文章小编给大家分享一下解析python中的jsonpath提取器代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

为什么要用jsonpath

就跟为什么要用xpath一样,jsonpath的设计灵感来源于xpath。一个强大的json数据提取工具。让用户不用编写脚本就可以提取到相应的json数据。

jsonpath的语法

jsonpath可以什么这两种模式来检索数据:

以点为分隔

$.store.book[0].title

$.store.book[0,1] #可以取到第一个和第二个book值

$.store.book[*].title #可以取到所的的book值

以中括号为分隔

$['store']['book'][0]['title']

对于输入.路径,内中路径将始终使用更通用的中括号模式。 (我猜是因为jsonpath在python中是dict,访问方式刚好是用中括号)

还支持[start:end:step]模式

"$.store.book[0:3:2].title" #和python中的range步长计算是一致的

@符号表达式:即可以用来代表长度,也可以用来代表name。

$.store.book[(@.length-1)].title #取到最后一个book的title

$.store.book[?(@.price < 10)].title #取到价格小于10的书的title

jsonpath 解析

接下来讲一个非常强大并且方便的 jsonpath 专门用于 json 解析,解决路径深的老大难问题!

先安装依赖包

pip install jsonpath

学习jsonpath 不得不提到xpath,这两者之间的语法是差不多的

|* |匹配所有元素节点

[] |[] |迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)

| |[,] |支持迭代器中做多选

[] |?() |支持过滤操作

n/a |() |支持表达式计算

() |n/a |分组,JsonPath不支持

使用示例

$是查找的根节点,传参数是python的dict 类型,当查找到的时候返回一个list结果,查找失败的时候返回 False.

import jsonpath
result = {
    "code": 0,
    "data": [
        {
            "age": 20,
            "create_time": "2021-09-15",
            "id": 1,
            "mail": "[email protected]",
            "name": "yoyo",
            "sex": "M"
        },
        {
            "age": 21,
            "create_time": "2021-09-16",
            "id": 2,
            "mail": "[email protected]",
            "name": "yoyo111",
            "sex": "M"
        }
    ],
    "msg": "success!"
}
msg = jsonpath.jsonpath(result, '$.msg')
print(msg)   # 输出结果 ['success!']
names = jsonpath.jsonpath(result, '$..name')
print(names)   # 输出结果 ['yoyo', 'yoyo111']
no = jsonpath.jsonpath(result, '$..yoyo')
print(no)   # 找不到是结果是 False

这样就可以不用管层级结构也能取值了。

相关文章

精彩推荐