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

遍历视频JSON内的消息JSON链接插入MongoDB时遇JSONDecodeError,如何解决?

解决JSONDecodeError:从视频消息链接导入MongoDB时的常见问题

看起来你在通过requests获取消息JSON并解析时遇到了典型的解码问题——requests.get(url3).json()会在返回内容不是有效JSON时抛出这个错误。我来帮你拆解可能的原因和对应的修复方法:

1. 先确认请求是否成功,返回的是什么内容

第一个要排查的点:服务器可能根本没返回JSON,而是返回了错误页面(比如404、500)或者非JSON文本。你可以先把请求拆开来,打印关键信息:

response = requests.get(url3)
# 先看状态码,200代表成功,其他都是异常
print(f"请求状态码: {response.status_code}")
# 打印响应的前500个字符,看看是不是JSON格式
print(f"响应内容预览: {response.text[:500]}")

如果状态码不是200,那你得先解决请求本身的问题:比如检查url3是否拼写正确、是否需要登录/授权、是不是有反爬机制拦截了请求。

2. 编码问题导致解析失败

有些服务器返回的JSON编码不是默认的UTF-8,requests自动识别编码出错,导致解析失败。你可以手动指定编码:

import json

response = requests.get(url3)
# 比如如果是GBK编码就改成'gbk',根据实际情况调整
response.encoding = 'utf-8'
try:
    raw_messages_data = response.json()
except json.JSONDecodeError as e:
    print(f"解码错误详情: {e}")

3. 返回的JSON本身有语法错误

有时候数据源的JSON可能有语法问题,比如末尾多了逗号、引号不匹配、转义错误。你可以用Python的json.loads捕获更详细的错误信息,定位问题点:

import json

response = requests.get(url3)
try:
    raw_messages_data = json.loads(response.text)
except json.JSONDecodeError as e:
    print(f"错误位置在字符第{e.pos}位")
    print(f"错误原因: {e.msg}")
    # 打印错误位置前后的内容,方便排查
    print(f"错误附近内容: {response.text[max(0, e.pos-50):e.pos+50]}")

如果确实是JSON本身的问题,你可以尝试做简单修复(比如用正则去掉末尾的逗号),或者联系数据源提供者修正。

4. 请求需要额外的头信息

很多API会校验请求头(比如User-Agent、Authorization),如果缺少这些头,服务器可能返回非JSON内容(比如403页面)。你可以添加必要的请求头:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    # 如果需要授权,添加对应的头,比如:
    # 'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}
response = requests.get(url3, headers=headers)
raw_messages_data = response.json()

建议你按照这个顺序排查,先确认请求是否成功,再看内容格式,最后处理编码或请求头的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:55:03