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

使用Python Requests库调用Twitter Decahose API时遭遇JSONDecodeError(Extra data)的解决咨询

解决Twitter Decahose API响应的JSONDecodeError问题

你遇到的问题根源在于Twitter Decahose API返回的不是标准的单个JSON对象/数组,而是换行分隔的JSON(NDJSON)格式——简单说就是每行对应一条独立的Tweet数据。直接调用r.json()会尝试把整个响应当作一个完整的JSON解析,当解析完第一个JSON对象后还有后续内容时,就会触发JSONDecodeError: Extra data错误。另外你用r.text或r.content时控制台崩溃,大概率是因为Decahose的数据流极大,一次性加载全部内容到内存导致内存溢出。

下面是针对性的解决方案:

正确处理方式:流式读取+逐行解析

因为Decahose是流式API,我们应该利用requests的流式处理能力,逐行读取并解析数据,避免一次性加载所有内容撑爆内存:

import requests
import json

# 替换为你的实际API信息
url = "你的Decahose API地址"
username = "你的认证用户名"
password = "你的认证密码"

# 开启流式请求,避免一次性下载全部数据
with requests.get(url, auth=(username, password), stream=True) as r:
    r.raise_for_status()  # 先确保请求本身没有错误
    # 逐行读取响应内容
    for line in r.iter_lines(decode_unicode=True):
        if line:  # 跳过流式响应中的空白行
            try:
                tweet_data = json.loads(line)
                # 在这里处理单条Tweet数据,比如打印、存储到数据库等
                print(tweet_data["id"])
            except json.JSONDecodeError as e:
                print(f"解析单行JSON失败: {e}")

关键细节说明

  • stream=True:告诉requests不要一次性下载全部响应,而是逐步获取数据,从根源避免内存过载。
  • iter_lines():完美匹配Decahose的NDJSON格式,逐行读取每条Tweet的JSON数据。
  • 空行过滤:流式响应中偶尔会出现空白行,直接解析会报错,所以需要先判断line是否非空。
  • 异常捕获:偶尔可能会出现格式异常的行,捕获JSONDecodeError可以保证程序持续运行,不会因单条错误数据崩溃。

为什么之前的方法会失效?

  • r.json():要求整个响应是一个合法的单个JSON结构,但Decahose返回的是多个独立JSON对象,解析到第二个对象时就会提示"Extra data"。
  • r.text/r.content:一次性加载所有响应内容,而Decahose的数据流量级极大,短时间内就会占用大量内存,导致控制台或程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:56:33