解析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,这两者之间的语法是差不多的
Xpath | JSONPath | 描述 |
---|---|---|
/ | $ | 跟节点 |
. | @ | 现行节点 |
/ | . or [] | 取子节点 |
.. | n/a | 取父节点 JsonPath不支持 |
// | .. | 相对节点 就是不管位置,选择所有符合条件的条件 |
- |* |匹配所有元素节点
[] |[] |迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
| |[,] |支持迭代器中做多选
[] |?() |支持过滤操作
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": "2833479@qq.com", "name": "yoyo", "sex": "M" }, { "age": 21, "create_time": "2021-09-16", "id": 2, "mail": "12344@qq.com", "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
这样就可以不用管层级结构也能取值了。
到此这篇关于python的jsonpath 提取器的文章就介绍到这了,更多相关python jsonpath 提取器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
如何将Yolov5的detect.py修改为可以直接调用的函数详解
YOLOv4还没有退热,YOLOv5已经发布,下面这篇文章主要给大家介绍了关于如何将Yolov5的detect.py修改为可以直接调用的函数的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下2022-04-04django框架model orM使用字典作为参数,保存数据的方法分析
这篇文章主要介绍了django框架model orM使用字典作为参数,保存数据的方法,结合实例形式分析了字典参数结合django model实现保存数据相关操作技巧,需要的朋友可以参考下2019-06-06Python深度学习之使用Albumentations对图像做增强
诸如RandomCrop和CenterCrop之类的某些增强功能可能会变换图像,使其不包含所有原始边界框. 本示例说明如何使用名为RandomSizedBBoxSafeCrop的变换来裁剪图像的一部分,但保留原始图像的所有边界框,需要的朋友可以参考下2021-05-05解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
这篇文章主要介绍了解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
最新评论