JSON加载报错JSONDecodeError: Extra data,如何处理多字典JSON文件?
解决JSONDecodeError: Extra Data加载多对象JSON文件的问题
这个报错我之前也碰到过!问题出在你的JSON文件格式上——json.load()只能解析单一的合法JSON结构(比如一个完整的数组或者单个对象),但你的文件里是一万多个独立的JSON字典直接放在一起,没有用数组包裹,也没有正确的分隔,所以解析器会认为“还有多余的数据没处理完”,就抛出了这个错误。
给你两个实用的解决方案:
方法一:逐行解析(推荐大文件使用)
因为每个字典是单独一行的,我们可以逐行读取并解析每一个JSON对象,这样内存占用更低,适合处理大量数据:
import json reviews = [] with open('ass1//data//reviews_Digital_Music.json', encoding="utf8") as f: for line in f: # 跳过可能存在的空行,避免解析出错 cleaned_line = line.strip() if cleaned_line: reviews.append(json.loads(cleaned_line))
方法二:转换为合法JSON数组(适合小文件)
如果你的文件不算特别大,可以先把所有内容转换成标准的JSON数组格式,再一次性加载:
import json with open('ass1//data//reviews_Digital_Music.json', encoding="utf8") as f: # 读取所有行,过滤空行并去除换行符 valid_lines = [line.strip() for line in f if line.strip()] # 把所有对象用逗号连接,再包裹上数组的[] formatted_json = f"[{','.join(valid_lines)}]" reviews = json.loads(formatted_json)
简单解释下:第一种方法是逐个处理每个JSON对象,不会一次性把整个文件加载到内存,对于一万条数据来说,这个方法更高效;第二种方法是把文件转换成标准JSON结构,一次性解析,代码更简洁,但如果文件特别大的话,内存压力会大一些。
内容的提问来源于stack exchange,提问作者Ehsan




