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 相关文章推荐
Python2.x版本中cmp()方法的使用教程
May 14 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
python tkinter窗口最大化的实现
Jul 15 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
使用numpy nonzero 找出非0元素
May 14 Python
python获取带有返回值的多线程
May 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
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
Javascript string 扩展库代码
2010/04/09 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
介绍Python中几个常用的类方法
2015/04/08 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
详解Python3的TFTP文件传输
2018/06/26 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
智能钱包:Ekster
2019/11/21 全球购物
社会保险接收函
2014/01/12 职场文书
益达广告词
2014/03/14 职场文书
企业宣传策划方案
2014/05/29 职场文书
文艺晚会策划方案
2014/06/11 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
防火标语大全
2014/10/06 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
淘宝好评语句大全
2014/12/31 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS