解析python中的jsonpath 提取器


Posted in Python onJanuary 18, 2022

为什么要用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不支持
// .. 相对节点 就是不管位置,选择所有符合条件的条件
  • |* |匹配所有元素节点

[] |[] |迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
&#124 |[,] |支持迭代器中做多选
[] |?() |支持过滤操作
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 提取器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python解析JSON数据的基本方法
Oct 15 Python
Python 文件管理实例详解
Nov 10 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
python绘制条形图方法代码详解
Dec 19 Python
Python3内置模块random随机方法小结
Jul 13 Python
python实现桌面托盘气泡提示
Jul 29 Python
Python坐标线性插值应用实现
Nov 13 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
Python爬虫定时计划任务的几种常见方法(推荐)
Jan 15 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 Python
浅谈pytorch中的dropout的概率p
May 27 Python
Python中如何处理常见报错
Jan 18 #Python
Python机器学习应用之工业蒸汽数据分析篇详解
用Python可视化新冠疫情数据
Python机器学习应用之基于线性判别模型的分类篇详解
68行Python代码实现带难度升级的贪吃蛇
Jan 18 #Python
如何利用Python实现n*n螺旋矩阵
Jan 18 #Python
聊聊Python String型列表求最值的问题
Jan 18 #Python
You might like
php利用gd库为图片添加水印
2016/11/09 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
JQuery 写的个性导航菜单
2009/12/24 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
js获取视频时长代码
2014/04/10 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
Python中bisect的用法
2014/09/23 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
Python切片索引用法示例
2018/05/15 Python
python文本数据处理学习笔记详解
2019/06/17 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
python文件和文件夹复制函数
2020/02/07 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
金山毒霸系列的笔试题
2013/04/13 面试题
请解释在new与override的区别
2012/10/29 面试题
智能电子应届生求职信
2013/11/10 职场文书
《泉水》教学反思
2014/04/11 职场文书
旷课检讨书
2015/01/26 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书