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监控网卡流量并使用graphite绘图的示例
Apr 27 Python
PyMongo安装使用笔记
Apr 27 Python
python定时器(Timer)用法简单实例
Jun 04 Python
python使用opencv驱动摄像头的方法
Aug 03 Python
Python封装原理与实现方法详解
Aug 28 Python
Python中整数的缓存机制讲解
Feb 16 Python
Python socket非阻塞模块应用示例
Sep 12 Python
python区分不同数据类型的方法
Oct 14 Python
在win64上使用bypy进行百度网盘文件上传功能
Jan 02 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
Pytorch环境搭建与基本语法
Jun 03 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
php图片加中文水印实现代码分享
2012/10/31 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
实例解析Array和String方法
2016/12/14 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
Python 元类使用说明
2009/12/18 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Python处理文本换行符实例代码
2018/02/03 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
python实现网页录音效果
2020/10/26 Python
Numpy数组的广播机制的实现
2020/11/03 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
中职应届生会计求职信
2013/10/23 职场文书
毕业班联欢会主持词
2014/03/27 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python