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实现ipsec开权限实例
Nov 11 Python
python optparse模块使用实例
Apr 09 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
python随机数分布random测试
Aug 27 Python
Python OpenCV对本地视频文件进行分帧保存的实例
Jan 08 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
Python命令行click参数用法解析
Dec 19 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 Python
完美解决keras保存好的model不能成功加载问题
Jun 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
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
Jquery实现上下移动和排序代码
2016/10/17 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
python 读入多行数据的实例
2018/04/19 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
Python全栈之列表数据类型详解
2019/10/01 Python
Python如何用filter函数筛选数据
2020/03/05 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
通信工程专业毕业生推荐信
2013/12/25 职场文书
小学新学期教师寄语
2014/01/18 职场文书
政协调研汇报材料
2014/08/15 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
银行招聘自荐信
2015/03/06 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书