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监控文件或目录变化
Jun 07 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
Python实现的视频播放器功能完整示例
Feb 01 Python
Python中一行和多行import模块问题
Apr 01 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
python实现自动登录后台管理系统
Oct 18 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
Python中Permission denied的解决方案
Apr 02 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 MYSQL中插入当前时间
2008/04/06 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
mac系统安装Python3初体验
2018/01/02 Python
Python工程师面试必备25条知识点
2018/01/17 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
python 如何实现遗传算法
2020/09/22 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
HTML5新增加的功能详解
2016/09/05 HTML / CSS
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
招商业务员岗位职责
2013/12/16 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书