Python用json.load加载多JSON字典报Extra data错误如何解决
你遇到的两个错误的根因:
- 第一个
JSONDecodeError: Extra data是因为标准json.load()只能解析单个合法JSON对象,你手上的文件是多独立JSON对象拼接的格式,不属于标准单JSON结构,所以原生方法不支持。 - 第二个
TypeError是因为json.dumps()的作用是将Python对象序列化为JSON字符串,你传入了文件句柄r作为入参,文件对象不属于可JSON序列化的类型,自然触发报错,这个修改方向是错误的。
可行解决方案
方案1:通用兼容方案(支持单个JSON跨多行,大文件低内存占用)
用json.JSONDecoder.raw_decode()逐块解析,不需要一次性加载整个文件到内存,也不需要修改源文件格式:
import json def read_json_file(file): result = [] decoder = json.JSONDecoder() buffer = "" with open(file, "r", encoding="utf-8") as f: for line in f: buffer += line.strip() # 循环处理缓冲区里的所有完整JSON对象 while buffer: try: # 从缓冲区起始位置解析一个JSON对象,返回对象和结束下标 obj, end_idx = decoder.raw_decode(buffer) result.append(obj) # 移除已经解析完成的内容,剩余内容留待后续拼接 buffer = buffer[end_idx:].strip() except json.JSONDecodeError: # 缓冲区内容不足以构成完整JSON对象,跳出循环读下一行 break return result
方案2:简化方案(仅适用于每个JSON对象独占一行的场景)
如果你的文件每个JSON对象单独占一行,没有跨行的情况,可以直接逐行解析,代码更简洁:
import json def read_json_file(file): result = [] with open(file, "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line: continue result.append(json.loads(line)) return result
内容的提问来源于stack exchange,提问作者python_help
相关产品推荐
相关产品推荐

