Python使用json.load加载JSON文件报JSONDecodeError错误如何解决
Python加载JSON文件触发
JSONDecodeError: Expecting value: line 1 column 1 (char 0)报错的解决方案 该报错的核心原因是JSON解析器读取到的首字符不符合合法JSON格式要求,即使肉眼可见文件开头为{"version":"1.1.0","events":[{,也可按以下步骤逐一排查解决:
编码不匹配问题
默认open()方法会使用操作系统默认编码读取文件(Windows下通常为GBK),而绝大多数导出的JSON文件为UTF-8编码,部分工具导出的文件还会带UTF-8 BOM头。指定编码打开即可解决:# 通用UTF-8编码读取 with open(filename, encoding='utf-8') as f: data = json.load(f) # 若上述代码仍报错,改用utf-8-sig处理带BOM头的文件 with open(filename, encoding='utf-8-sig') as f: data = json.load(f)文件开头存在不可见无效字符
部分导出工具会在文件开头插入换行、零宽空格等不可见控制字符,肉眼无法识别。可先读取全部内容,定位到JSON起始位置后再用json.loads解析:注意:json.loads入参要求为字符串/字节类型,直接传入文件对象会触发类型报错,也就是你之前遇到的和txt相关的报错。
with open(filename, encoding='utf-8') as f: content = f.read() # 定位第一个JSON起始字符'{'的位置,跳过前面的无效内容 json_start_idx = content.find('{') if json_start_idx == -1: raise ValueError("文件内不存在合法JSON结构") # 截取有效内容解析 data = json.loads(content[json_start_idx:])文件空/路径错误校验
若传入的文件路径错误、或者文件实际为空,也会触发该报错,可先增加前置校验:import os # 校验文件是否存在且大小不为0 if not os.path.exists(filename) or os.path.getsize(filename) == 0: raise ValueError("目标文件不存在或为空,请检查路径配置")
内容的提问来源于stack exchange,提问作者Cdhodge2002
相关产品推荐
相关产品推荐

