解析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(Tornado)模拟登录小米抢手机
Nov 12 Python
Python实现从脚本里运行scrapy的方法
Apr 07 Python
定制FileField中的上传文件名称实例
Aug 23 Python
python放大图片和画方格实现算法
Mar 30 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
python读取图片任意范围区域
Jan 23 Python
Django 删除upload_to文件的步骤
Mar 30 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
Pandas自定义选项option设置
Jul 25 Python
Elasticsearch 基本查询和组合查询
Apr 19 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 FLEA中二叉树数组的遍历输出
2012/09/26 PHP
ThinkPHP安装和设置
2015/07/27 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
json跟xml的对比分析
2008/06/10 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
详解如何运行vue项目
2019/04/15 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
python用插值法绘制平滑曲线
2021/02/19 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
年终总结会议主持词
2014/03/17 职场文书
西安兵马俑导游词
2015/02/02 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
电工生产实习心得体会
2016/01/22 职场文书