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连接sql server乱码的解决方法
Jan 28 Python
在Python中使用正则表达式的方法
Aug 13 Python
Python中字符串的格式化方法小结
May 03 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
flask 框架操作MySQL数据库简单示例
Feb 02 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Django实现celery定时任务过程解析
Apr 21 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
Python+Kepler.gl实现时间轮播地图过程解析
Jul 20 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 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
session 的生命周期是多长
2006/10/09 PHP
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
js函数般调用正则
2008/04/08 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
python文件及目录操作代码汇总
2020/07/08 Python
详解python中的闭包
2020/09/07 Python
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
业务代表的岗位职责
2013/11/16 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
详解Python中的进程和线程
2021/06/23 Python
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js