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 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python脚本实现DNSPod DNS动态解析域名
Feb 14 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
使用rpclib进行Python网络编程时的注释问题
May 06 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
解读python logging模块的使用方法
Apr 17 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
python 修改本地网络配置的方法
Aug 14 Python
pytorch之添加BN的实现
Jan 06 Python
python global和nonlocal用法解析
Feb 03 Python
聊聊python中的循环遍历
Sep 07 Python
pandas DataFrame.shift()函数的具体使用
May 24 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的Yii框架中的属性(Property)
2016/03/18 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
csdn 博客的css样式 v3
2009/02/24 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
Three.js快速入门教程
2016/09/09 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python Django模板的使用方法
2016/01/14 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
python实现单机五子棋
2020/08/28 Python
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
经典大学生求职信范文
2014/01/06 职场文书
中学教师培训制度
2014/01/31 职场文书
2014年安全生产责任书
2014/07/22 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python