Python读取JSON文件报JSONDecodeError: Extra data错误该如何解决?
错误原因
你收到的JSONDecodeError: Extra data报错核心原因是读取的JSON文件格式不符合标准JSON规范:
- 标准JSON要求单份文件只能包含一个顶层JSON结构(要么单个对象,要么一个包含多个对象的数组)
- 你当前的
users.json属于JSON Lines(行存JSON)格式,每行是一个独立的JSON对象,既没有被包裹在数组中,不同对象之间也没有用逗号分隔,因此一次性读取全量内容解析时,解析完第一行对象后检测到剩余内容就会抛出多余数据的错误。
解决方案
方案1:适配现有JSON Lines格式解析(推荐,无需修改源文件)
逐行读取文件,每行单独做JSON解析,把所有解析后的字典存入列表即可,修改后的代码如下:
import json json_list = [] with open("users.json", "r", encoding="utf-8") as f: # 逐行遍历文件 for line in f: # 跳过空行避免解析错误 line = line.strip() if not line: continue # 单行解析JSON item = json.loads(line) json_list.append(item) # 打印验证结果 print(f"共解析到{len(json_list)}条数据") print(type(json_list[0]))
方案2:修改源文件为标准JSON格式
如果不想调整代码,可修改users.json内容,把所有对象放到一个数组中,对象之间用逗号分隔,修改后的JSON内容如下:
[ {"_id":{"$od":"5f12"},"ready":true,"createdon":{"$date":1609687444800},"lastLogin":{"$date":1858},"position":"consumer","signUp":"Email","state":"WI"}, {"_id":{"$od":"5f12"},"ready":true,"createdon":{"$date":1609687444800},"lastLogin":{"$date":1858},"position":"consumer","signUp":"Email","state":"WI"} ]
修改后你原本的代码就可以正常运行,最终返回的json_value是一个包含两个字典的列表。
内容的提问来源于stack exchange,提问作者malaba
相关产品推荐
相关产品推荐

