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实现支持目录FTP上传下载文件的方法
Jun 03 Python
Python实现简单过滤文本段的方法
May 24 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
Python获取网段内ping通IP的方法
Jan 31 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Django之全局使用request.user.username的实例详解
May 14 Python
Python grpc超时机制代码示例
Sep 14 Python
python操作链表的示例代码
Sep 27 Python
python 基于opencv操作摄像头
Dec 24 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
浅析Django接口版本控制
Jun 26 Python
python中 .npy文件的读写操作实例
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 mysql与mysqli事务使用说明 分享
2013/08/17 PHP
浅谈本地WAMP环境的搭建
2015/05/13 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
python基础教程之匿名函数lambda
2017/01/17 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
python如何实时获取tcpdump输出
2020/09/16 Python
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
优秀民警事迹材料
2014/01/29 职场文书
公司募捐倡议书
2014/05/14 职场文书
优秀会计求职信
2014/07/04 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
创业计划书之花店
2019/09/20 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android