Python使用jsonpath-rw模块处理Json对象操作示例


Posted in Python onJuly 31, 2018

本文实例讲述了Python使用jsonpath-rw模块处理Json对象操作。分享给大家供大家参考,具体如下:

这两天在写一个爬虫,需要从网站返回的json数据提取一些有用的数据。

向url发起请求,返回的是response,在python3中,response.content是二进制bytes类型的,需要用decode()转成unicode的str类型

#如果用的requests发的请求
import json
response = requests.get(url,headers=self.headers)
response = response.content.decode()
response = json.loads(response) #转成json对象,在python里也就是dict类型
#如果用的scrapy.Request发的请求
import json
import scrapy
response = scrapy.Request(url,headers=self.headers)
response = response.text.decode()
response = json.loads(response) #转成json对象,在python里也就是dict类型

也就是说处理json对象其实可以和处理dict一样,那就要用到很多中括号,而且取值也只能取单个精确的值。一点都不灵活

用过xpath和css选择器的人当然会觉得这种方法很笨重。

而恰巧json也有类型的选择器:jsonpath

但是需要注意的是,python的库并不是jsonpath(还真有这个库,但是不知如何使用,官方也没有给出python的使用文档),真正在python中可以使用的库是:jsonpath-rw

官方文档:https://pypi.python.org/pypi/jsonpath-rw (更多jsonpath的语法请点击链接)

下面只列下简单常用的基本方法

使用示例

>>> from jsonpath_rw import jsonpath, parse
>>> json_obj = {"student":[{"male":176,"female":162},{"male":174,"female":159}]}
>>> jsonpath_expr = parse("student[*].male")
>>> male = jsonpath_expr.find(json_obj)
>>> male #返回的是list,但是不是我们想要的值
[DatumInContext(value=176, path=Fields('male'), context=DatumInContext(value={'male': 176, 'female': 162}, path=<jsonpath_rw.jsonpath.Index object at 0x000001C6B95109B0>, context=DatumInContext(value=[{'male': 176, 'female': 162}, {'male': 174, 'female': 159}], path=Fields('student'), context=DatumInContext(value={'student': [{'male': 176, 'female': 162}, {'male': 174, 'female': 159}]}, path=This(), context=None)))), DatumInContext(value=174, path=Fields('male'), context=DatumInContext(value={'male': 174, 'female': 159}, path=<jsonpath_rw.jsonpath.Index object at 0x000001C6B9510588>, context=DatumInContext(value=[{'male': 176, 'female': 162}, {'male': 174, 'female': 159}], path=Fields('student'), context=DatumInContext(value={'student': [{'male': 176, 'female': 162}, {'male': 174, 'female': 159}]}, path=This(), context=None))))]
#想要获取值,要用如下方法
>>> [match.value for match in male]
[176, 174]
Python 相关文章推荐
Python实现栈的方法
May 26 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
Python装饰器知识点补充
May 28 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 Python
django项目登录中使用图片验证码的实现方法
Aug 15 Python
详解python变量与数据类型
Aug 25 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
5款实用的python 工具推荐
Oct 13 Python
python 基于opencv实现图像增强
Dec 23 Python
python实现网络五子棋
Apr 11 Python
flask-socketio实现WebSocket的方法
Jul 31 #Python
深入flask之异步非堵塞实现代码示例
Jul 31 #Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 #Python
Windows下python3.6.4安装教程
Jul 31 #Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 #Python
win8下python3.4安装和环境配置图文教程
Jul 31 #Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 #Python
You might like
层叠菜单的动态生成
2006/10/09 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
jQuery 选择器理解
2010/03/16 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
JavaScript中this详解
2015/09/01 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
Python中的连接符(+、+=)示例详解
2017/01/13 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
Python列表对象实现原理详解
2019/07/01 Python
Python列表如何更新值
2020/05/27 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
J2EE是技术还是平台还是框架
2016/08/14 面试题
计算机网络专业个人的自我评价
2013/10/17 职场文书
大专毕业生自我评价分享
2013/11/10 职场文书
会展中心部门工作职责
2013/11/27 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
信息系统专业个人求职信范文
2013/12/07 职场文书
优秀应届生求职信
2014/06/16 职场文书
人大调研汇报材料
2014/08/14 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
工作收入住址证明
2014/10/28 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL