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 Web开发框架Django
Jun 30 Python
Python3基础之输入和输出实例分析
Aug 18 Python
Python使用turtule画五角星的方法
Jul 09 Python
python正则实现提取电话功能
Feb 24 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
Apr 27 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
用python3读取python2的pickle数据方式
Dec 25 Python
3种python调用其他脚本的方法
Jan 06 Python
Python改变对象的字符串显示的方法
Aug 01 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 Python
Python内置数据结构列表与元组示例详解
Aug 04 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
通过文字传递创建的图形按钮
2006/10/09 PHP
PHP 批量更新网页内容实现代码
2010/01/05 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
详解python-图像处理(映射变换)
2019/03/22 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
个人实用的自我评价范文
2013/11/23 职场文书
微观物理专业自荐信
2014/01/26 职场文书
土地转让协议书
2014/04/15 职场文书
求职意向书
2014/07/29 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
以权谋私检举信范文
2015/03/02 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA