Python使用jsonpath-rw模块处理Json对象操作示例

听雨眠
听雨眠
发布时间:2026-10-13| 6人浏览过
原创

本文介绍在Python爬虫开发中,如何利用jsonpath-rw模块高效提取JSON数据。文章对比了传统字典取值方式的局限性,演示了从requests或scrapy获取响应后转换为JSON对象的过程,并通过具体代码示例展示了jsonpath-rw的基本用法及值提取技巧,帮助开发者更灵活地处理复杂JSON结构。

本文通过具体实例,详细讲解在Python中利用jsonpath-rw模块处理JSON对象的方法,供读者参考学习。

近期在进行爬虫开发时,需要从网站返回的JSON格式数据中提取关键信息。

向指定URL发起请求后,获取到的response对象在Python3环境下,其response.content属性返回的是二进制bytes类型数据,必须调用decode()方法将其转换为unicode类型的字符串,才能进一步处理。

#如果用的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]

此外,推荐几款实用的JSON在线工具供参考:

在线JSON代码检验、格式化与美化工具: http://tools.jb51.net/code/json

JSON在线格式化工具: http://tools.jb51.net/code/jsonformat

在线XML与JSON互转工具: http://tools.jb51.net/code/xmljson

JSON代码在线格式化、美化、压缩、编辑及转换工具: http://tools.jb51.net/code/jsoncodeformat

在线JSON压缩与转义工具: http://tools.jb51.net/code/json_yasuo_trans

对Python其他内容感兴趣的读者,可进一步查阅本站专题:《Python操作json技巧总结》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python文件与目录操作技巧汇总》。

希望本文所述内容能对大家的Python编程实践有所帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。