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

为何json.loads()使用encoding='utf-8-sig'无效?KeyError问题排查

问题原因及解决办法
  • 错误1:json.loads()不支持encoding参数
    Python 3的json.loads()处理的是Unicode字符串,根本不存在encoding参数(这个参数是Python 2的遗留内容)。你第二个try块里加这个参数不仅完全无效,还会导致JSON解析失败,最后file_data还是初始的空字典{},后续访问file_data['name']自然触发KeyError。

  • 错误2:读取文件时未处理UTF-8 BOM
    用默认方式打开文件时,系统默认编码会把UTF-8 BOM的字节(\xef\xbb\xbf)转成乱码字符,导致JSON解析器无法识别开头的有效JSON结构,直接解析失败。

修正后的代码
import json

file_data = {}
# 打开文件时指定encoding='utf-8-sig',自动去除BOM标记
with open(path, encoding='utf-8-sig') as open_file:
    data = open_file.read()

try:
    file_data = json.loads(data)
    print(file_data['name'])  # 现在可正常访问name字段
except json.JSONDecodeError as e:
    print(f"JSON解析失败: {e}")
说明

用utf-8-sig编码打开文件时,Python会自动识别并移除开头的UTF-8 BOM标记,读出来的data是干净的JSON字符串,直接用json.loads()就能解析成正常的字典,不会再出现解析失败或KeyError问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:20:04