如何打开读取JSON文件?186MB大体积JSON文件Python读取报错求助
嘿,我来帮你搞定这两个问题!先从基础的JSON读取方法说起,再针对性解决你遇到的大文件报错问题~
一、基础:如何打开并读取JSON文件
Python读取JSON文件有两种常用方式,核心是区分json.load()和json.loads()的用法:
使用
json.load()直接读取文件对象(推荐)
这种方法更简洁,还能借助with语句自动管理文件资源,避免忘记关闭文件:import json with open('file.json', 'r', encoding='utf-8') as f: data = json.load(f)json.load()会直接从打开的文件对象中解析JSON数据,不需要手动读取整个文件内容。使用
json.loads()读取文件内容字符串
如果你需要先读取文件内容再解析,要确保整个字符串是单个有效的JSON结构(比如一个对象或数组):import json with open('file.json', 'r', encoding='utf-8') as f: content = f.read() data = json.loads(content)
二、解决你的186MB JSON文件报错问题
你遇到的ValueError: Extra data,核心原因是你的JSON文件不是单一的有效JSON结构——比如它可能是多个JSON对象直接拼接(比如{"a":1}{"b":2}),或者是每行一个独立JSON的JSON Lines格式。再加上文件体积达186MB,一次性读取会占用大量内存,所以推荐用流式/逐行处理的方式。
下面分两种常见情况给出解决方案:
情况1:文件是JSON Lines格式(每行一个独立JSON)
这种格式非常常见,比如导出的批量数据、日志文件等,每行都是一个完整的JSON对象。可以逐行读取解析,内存占用极低:
import json data_list = [] with open('file.json', 'r', encoding='utf-8') as f: for line in f: # 跳过可能存在的空行 stripped_line = line.strip() if not stripped_line: continue try: item = json.loads(stripped_line) data_list.append(item) except json.JSONDecodeError as e: print(f"解析行时出错: {e}")
情况2:文件是多个JSON对象直接拼接(无换行)
如果你的文件是类似{"a":1}{"b":2}这种没有分隔的拼接格式,手动分割会很麻烦,推荐用ijson库做流式解析,它会逐块读取文件并解析,完全不需要加载整个文件到内存:
首先安装ijson:
pip install ijson
然后用流式解析的方式处理:
import ijson with open('file.json', 'rb') as f: # 流式读取每个顶级JSON对象 for item in ijson.items(f, ''): # 这里可以对每个item做处理,比如存入数据库、分析数据等 print(item)
额外小贴士
- 处理大文件时,绝对不要一次性用
f.read()读取整个文件,会导致内存占用过高甚至崩溃。 - 始终用
with语句打开文件,它会在代码块结束后自动关闭文件,避免资源泄漏。 - 如果不确定文件格式,可以用文本编辑器打开文件的前几行,确认是单一JSON、JSON Lines还是拼接格式。
内容的提问来源于stack exchange,提问作者user8588162
相关产品推荐
相关产品推荐

