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实现文件名批量替换和内容替换
Mar 20 Python
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
Python的re模块正则表达式操作
May 25 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
python3.6使用pickle序列化class的方法
Oct 22 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
Python上下文管理器用法及实例解析
Nov 11 Python
python 实现线程之间的通信示例
Feb 14 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 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 CURD方法之order方法详解
2014/06/18 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
jQuery中after的两种用法实例
2013/07/03 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python实现简单的代理服务器
2015/07/25 Python
破解安装Pycharm的方法
2018/10/19 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
输入N,打印N*N矩阵
2012/02/20 面试题
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android