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实现将英文单词表示的数字转换成阿拉伯数字的方法
Jul 02 Python
Python计算字符宽度的方法
Jun 14 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
Python实现购物车功能的方法分析
Nov 10 Python
python MySQLdb使用教程详解
Mar 20 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
Python实现EM算法实例代码
Oct 04 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 Python
Python PIL按比例裁剪图片
May 11 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生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python实现电子书翻页小程序
2019/07/23 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
运动会获奖感言
2014/02/11 职场文书
档案工作汇报材料
2014/08/21 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS