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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
python查询mysql中文乱码问题
Nov 09 Python
python实现发送和获取手机短信验证码
Jan 15 Python
Python reduce()函数的用法小结
Nov 15 Python
Python语言描述最大连续子序列和
Dec 05 Python
python爬取个性签名的方法
Jun 17 Python
Selenium控制浏览器常见操作示例
Aug 13 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
Python趣味入门教程之循环语句while
Aug 26 Python
python判断变量是否为列表的方法
Sep 17 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下读取文本文件的代码
2008/07/02 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
[06:44]2014DOTA2国际邀请赛-钥匙体育馆开战 开幕式振奋人心
2014/07/19 DOTA
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
大学生自我评价怎样写好
2013/10/23 职场文书
实习教师自我鉴定
2013/12/12 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
开服装店计划书
2014/08/15 职场文书