使用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
相关产品推荐
相关产品推荐

