解析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通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
python实现红包裂变算法
Feb 16 Python
Python字符串处理实例详解
May 18 Python
手把手教你python实现SVM算法
Dec 27 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
对python中的logger模块全面讲解
Apr 28 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
详解numpy.meshgrid()方法使用
Aug 01 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Django利用AJAX技术实现博文实时搜索
May 06 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中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
php intval的测试代码发现问题
2008/07/27 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
Python-嵌套列表list的全面解析
2016/06/08 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
高中教师考核方案
2014/05/18 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
村主任当选感言
2015/08/01 职场文书