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全局变量操作详解
Apr 14 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
Python从零开始创建区块链
Mar 06 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
Apr 02 Python
增大python字体的方法步骤
Jul 05 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
如何用Python编写一个电子考勤系统
Feb 08 Python
Python破解极验滑动验证码详细步骤
May 21 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
Apr 14 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
PHP原理之异常机制深入分析
2010/08/08 PHP
php简单的会话类代码
2011/08/08 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
python操作redis的方法
2015/07/07 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
python实现网站微信登录的示例代码
2019/09/18 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
经贸专业毕业生求职信
2014/03/23 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
学校施工安全责任书
2015/01/29 职场文书
党员个人年度总结
2015/02/14 职场文书
出国留学英文自荐信
2015/03/25 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python