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

使用pd.read_json、json.load读取JSON文件报错,如何通过替换或其他方法正确加载?

JSON文件含特殊字符加载失败的解决方案

方案1:先读取为纯文本清洗后再解析

  • 第一步:读取文件为纯文本,优先指定兼容BOM的编码,避免编码前缀导致解析失败:
with open(file_name, 'r', encoding='utf-8-sig', errors='ignore') as f:
    raw_content = f.read()
  • 第二步:清洗不可见特殊控制字符,过滤掉JSON不识别的零宽字符、控制符等:
import re
# 过滤常见不可见特殊字符,保留正常的换行、制表符、空格
clean_content = re.sub(r'[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f\u200b-\u200f\ufeff]', '', raw_content)
  • 第三步:可选:定向删除问题行,如果确认"error": null,为冗余内容:
clean_content = re.sub(r'\s*"error":\s*null,\s*', '', clean_content)
  • 第四步:用清洗后的内容正常解析JSON:
import json
import pandas as pd

# 两种解析方式二选一即可
data = json.loads(clean_content)
df = pd.read_json(clean_content)

方案2:使用高容错性解析工具

  • 对于格式不严格的JSON,可使用json5库解析,支持多余逗号、注释等非标准JSON特性:
import json5
with open(file_name, 'r', encoding='utf-8-sig') as f:
    data = json5.load(f)
  • 若仍报错,可先通过字符编码检测工具确认文件真实编码,避免编码不匹配导致的字符乱码:
import chardet
with open(file_name, 'rb') as f:
    raw_data = f.read()
encoding = chardet.detect(raw_data)['encoding']
# 后续使用检测到的编码读取文件即可

特殊字符排查方法

如果上述方案仍未解决,可以打印文件前几百个字符的编码值,定位异常不可见字符的位置:

with open(file_name, 'r', encoding='utf-8-sig') as f:
    content = f.read()
# 打印前200个字符的位置、字面量、Unicode编码
for idx, char in enumerate(content[:200]):
    print(f"位置{idx}: 字符{repr(char)} 编码{ord(char)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:27:03