You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python requests场景下不加载完整JSON文件提取指定键值

大体积JSON流式提取(Python requests场景)

可以实现无需加载完整JSON即可提取目标键值,核心依赖requests的流式响应能力+增量JSON解析工具,具体方案如下:

实现原理

常规的response.json()方法需要等待完整响应下载完成后,把整个JSON结构加载到内存再解析,对于GB级的大JSON会占用极高内存甚至直接OOM。
而用以下方案可以避免这个问题:

  1. 开启requests的流式响应模式,仅先获取响应头,响应体逐块迭代获取,不需要一次性下载完整内容
  2. 搭配增量JSON解析库(如ijson)边接收数据边解析,匹配到目标键值后即可直接终止处理,不需要解析完整JSON结构

操作步骤

1. 安装依赖

使用ijson作为流式JSON解析工具,执行命令安装:
pip install ijson

2. 流式请求+解析示例

import requests
import ijson

# 加stream=True开启流式请求
resp = requests.get("你的请求地址", stream=True)

# 第二个参数为目标键的JSON路径,层级用.分隔,数组元素用.item标识
# 示例为提取blocks数组下所有元素的hash字段,你可以根据实际结构调整路径
for hash_val in ijson.items(resp.raw, "blocks.item.hash"):
    print(f"提取到目标值:{hash_val}")
    # 拿到所需的所有值后可以直接break,停止后续下载和解析
    break

扩展说明

  • 该方案同样适配本地大体积JSON文件的解析,只需要把本地文件的文件对象传入ijson.items即可,无需读取完整文件到内存。
  • 对于多层嵌套的JSON结构,只需要按照层级拼接路径即可,比如要提取blocks下tx数组的value字段,路径可以写为blocks.item.tx.item.value。
  • 实测该方案解析10GB级JSON文件内存占用可以稳定在100MB以内,仅提取单个键值的场景下速度比全量解析快5~10倍。

内容的提问来源于stack exchange,提问作者user13581867

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:27:04