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格式化字符串实例总结
Sep 28 Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
Python3.4 splinter(模拟填写表单)使用方法
Oct 13 Python
Python中一些深不见底的“坑”
Jun 12 Python
python实现超市管理系统(后台管理)
Oct 25 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
什么是python的列表推导式
May 26 Python
浅析Python 多行匹配模式
Jul 24 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
python实现图片转字符画
Feb 19 Python
基于python定位棋子位置及识别棋子颜色
Jul 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
php函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
用js做一个小游戏平台 (一)
2009/12/29 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
jQuery+Ajax实现用户名重名实时检测
2017/06/01 jQuery
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
毕业生简单求职信
2013/11/19 职场文书
高中生评语大全
2014/04/25 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
刑事上诉状范文
2015/05/22 职场文书
升学宴祝酒词
2015/08/11 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
Redis可视化客户端小结
2021/06/10 Redis