Python导入多讨论JSON文件时JSONDecodeError问题求助
解决JSONDecodeError: Extra data问题
问题原因
你的JSON文件里是多个独立的JSON对象(每个讨论对应一个{}),但Python的json.load()只能读取单个JSON值(要么是一个对象,要么是一个包含所有对象的数组),多个独立对象连在一起不符合JSON规范,所以触发JSONDecodeError。
解决方案
方法1:手动修改JSON文件(适合小文件)
把所有讨论对象放到一个数组里,操作如下:
- 在文件开头添加
[ - 在文件结尾添加
] - 在每个对象的末尾(比如第854行的
}后面)添加逗号,注意最后一个对象后面不要加逗号
修改后的JSON结构示例:
[ { "Title": "How to get a new badge?", ... }, { "Title": "feed back on achievement badges", ... } ]
修改后原代码就能正常读取:
import json file_json = open("/content/drive/MyDrive/Lab_SC/gh_discussions_badges.json") data = json.load(file_json) print(data)
方法2:Python逐行解析(适合大文件)
如果文件太大手动修改麻烦,用代码逐行拼接并尝试解析每个完整的JSON对象:
import json data_list = [] current_json = "" with open("/content/drive/MyDrive/Lab_SC/gh_discussions_badges.json", "r") as f: for line in f: current_json += line.strip() try: # 尝试解析当前拼接的内容 discussion = json.loads(current_json) data_list.append(discussion) current_json = "" # 重置,准备解析下一个对象 except json.JSONDecodeError: # 内容不完整,继续拼接下一行 continue # 查看解析结果 print(f"共解析到{len(data_list)}条讨论") print(data_list[0])
方法3:用ijson流式解析(适合超大型文件)
如果文件大到无法一次性加载到内存,用ijson库流式解析每个独立对象:
- 先安装ijson:
!pip install ijson
- 解析代码:
import ijson data_list = [] current_obj = {} key = None with open("/content/drive/MyDrive/Lab_SC/gh_discussions_badges.json", "r") as f: # 流式遍历JSON元素 for prefix, event, value in ijson.parse(f): if event == 'map_key': key = value elif event in ['string', 'number', 'boolean', 'null']: current_obj[key] = value elif event == 'end_map': # 一个讨论对象解析完成 data_list.append(current_obj) current_obj = {} # 查看结果 print(f"共解析到{len(data_list)}条讨论")
内容的提问来源于stack exchange,提问作者eugen92
相关产品推荐
相关产品推荐

