本文实例讲述了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

下面只列下简单常用的基本方法

使用示例

>>> 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=, 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=, 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 jsonpath-rw_Python使用jsonpath-rw模块处理Json对象操作示例相关推荐

  1. python打开文件并读取内容-Python实现的读取文件内容并写入其他文件操作示例

    本文实例讲述了Python实现的读取文件内容并写入其他文件操作.分享给大家供大家参考,具体如下: 文件目录结构,如图: read_file.py是工作文件,file_test.py是读取文件源,wri ...

  2. Python学习-基础篇5 常用模块+类与对象(1)

     #random模块 1 import random2 3 print(random.random())#(0,1)----float 大于0且小于1之间的小数4 5 print(random.ran ...

  3. python同时对文件进行读写操作-Python实现的读取文件内容并写入其他文件操作示例...

    本文实例讲述了Python实现的读取文件内容并写入其他文件操作.分享给大家供大家参考,具体如下: 文件目录结构,如图: read_file.py是工作文件,file_test.py是读取文件源,wri ...

  4. python乘法函数_Python中列表与元组的乘法操作示例

    本文实例讲述了Python中列表与元组的乘法操作.分享给大家供大家参考,具体如下: 直接上code吧,还可以这么玩儿 列表乘法: li=[1,] li=li*3 print(li) out: [1, ...

  5. python 双精度浮点_Python双精度浮点数运算并分行显示操作示例

    Python双精度浮点数运算并分行显示操作示例 这篇文章主要介绍了Python双精度浮点数运算并分行显示操作,涉及Python数学运算及显示相关操作技巧,注释备有详尽的说明,需要的朋友可以参考下 #c ...

  6. python 中文件输入输出及os模块对文件系统的操作

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...

  7. python神奇时钟项目_Python Tkinter模块实现时钟功能应用示例

    本文实例讲述了Python Tkinter模块实现时钟功能.分享给大家供大家参考,具体如下: 本机测试效果: 完整代码: # coding=utf-8 from Tkinter import * im ...

  8. python卷积计算_Python使用scipy模块实现一维卷积运算示例

    本文实例讲述了python使用scipy模块实现一维卷积运算.分享给大家供大家参考,具体如下: 一 介绍 signal模块包含大量滤波函数.b样条插值算法等等.下面的代码演示了一维信号的卷积运算. 二 ...

  9. python namedtuple用法_Python的collections模块中namedtuple结构使用示例

    namedtuple 就是命名的 tuple,比较像 C 语言中 struct.一般情况下的 tuple 是 (item1, item2, item3,...),所有的 item 都只能按照 inde ...

最新文章

  1. 《R语言实战》读书笔记--第一章 R语言介绍
  2. 概率分布:PMF与PDF
  3. Vivado抓取信号
  4. python 堆_面试再问你什么是堆和栈,你就把这篇文章甩给他
  5. VC++ .net 2005运行库解析
  6. Java访问修饰符——用于控制可见性
  7. ios-deploy out of date (1.9.4 is required). To upgrade with Brew: brew upgrade ios-deploy
  8. 力扣-507 完美数
  9. ROS2 Galactic nav2 使用自己的行为树插件
  10. docker深入2-API示例
  11. 2022年6月25日PMP考试通关宝典-5
  12. libcurl基础教程及封装(支持同步异步请求,支持多线程下载,支持https)
  13. 会议会展产业要善用信息技术提高活动运营管理效率
  14. HTML个人网站设计(源码)
  15. ins图片视频批量下载
  16. 亚马逊查询订单listorders方法
  17. Win7系统一直提示盗版怎么办【系统天地】
  18. 成年人社交中的10个潜规则
  19. JAVA音程_桌面应用|与 Linux 一起学习:学习音乐
  20. android 市场 历史版本,安卓市场旧版本

热门文章

  1. 基于OGG Datahub插件将Oracle数据同步上云
  2. 省钱小贴士(ECS):教你如何每年省出8w+ 块
  3. 阿里云MaxCompute(大数据)公开数据集---带你玩转人工智能 1
  4. 【SpringCloud-Alibaba系列教程】14.一文教你入门RocketMQ
  5. 当类的泛型相关时,如何在两个泛型类之间创建类似子类型的关系呢
  6. 技术案例分享:WIPTEC采用Aruba边缘服务平台,实现物流配送生产自动化、精简生产力
  7. OpenInfra Days China 2020大会议程已上线!
  8. 行!人工智能玩大了!程序员:太牛!你怎么看?
  9. 刷爆了!GitHub标星1.6W,这个 Python 项目太实用!
  10. 商家笑了 设计师哭了,京东+英特尔的AI这招太绝