You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动