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

Python使用requests模块无法将response.text转为字典的问题

解决requests解析JSON时的UTF-8 BOM解码错误

问题根源

报错提示的JSONDecodeError是因为接口返回的JSON文本开头带有UTF-8 BOM(字节顺序标记),而requests默认的utf-8解码逻辑不会自动去除这个标记,导致JSON解析器无法识别有效格式。

两种可行的解决方法

方法1:手动用utf-8-sig解码响应内容

直接对响应的原始字节内容进行解码,再用json.loads解析:

import json
import requests

def my_function():
    url = API_URI["test"]
    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}    
    r = requests.post(url, data=json.dumps(api), headers=headers)
    
    # 使用utf-8-sig解码,自动去除BOM标记
    decoded_response = r.content.decode('utf-8-sig')
    print(decoded_response)
    
    # 解析为字典(注意不要用dict作为变量名,避免覆盖内置类型)
    result_dict = json.loads(decoded_response)
    return result_dict

my_function()

方法2:设置requests响应的编码为utf-8-sig

直接修改响应对象的编码属性,让r.text和r.json()自动使用正确的解码方式:

import json
import requests

def my_function():
    url = API_URI["test"]
    headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}    
    r = requests.post(url, data=json.dumps(api), headers=headers)
    
    # 强制响应使用utf-8-sig编码解码
    r.encoding = 'utf-8-sig'
    print(r.text)
    
    result_dict = r.json()
    return result_dict

my_function()

额外注意点

  • 不要用dict作为变量名,它是Python的内置类型,容易引发意外问题,改用result_dict这类自定义名称更安全。
  • 两种方法本质都是通过utf-8-sig编码处理掉开头的BOM标记,确保JSON文本符合标准格式。

内容的提问来源于stack exchange,提问作者Mike C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:01:25