如何在使用json.load()加载大JSON文件时提取指定键值对?
提取大JSON文件中的特定键值对
方案1:全量加载后提取(内存充足时用)
如果你的JSON是一个包含所有观测的数组(比如[{"name":"John", "rollno":4}, ...]),直接加载后用列表推导式筛选即可:
import json # 打开文件并加载全部数据 with open('your_large_file.json', 'r') as f: full_data = json.load(f) # 提取所有rollno值(仅保留数值) rollno_values = [item['rollno'] for item in full_data] # 或者保留键值对结构 rollno_entries = [{'rollno': item['rollno']} for item in full_data]
方案2:流式解析(内存紧张时用)
如果文件过大,一次性加载会占用过多内存,用流式解析逐段处理,避免全量加载整个文件:
import json rollno_list = [] decoder = json.JSONDecoder() with open('your_large_file.json', 'r') as f: buffer = '' for line in f: buffer += line.strip() # 循环解析缓冲区中的完整JSON对象 while buffer: try: obj, parse_idx = decoder.raw_decode(buffer) if 'rollno' in obj: rollno_list.append(obj['rollno']) # 如需保留键值对:rollno_list.append({'rollno': obj['rollno']}) # 截断缓冲区,处理剩余内容 buffer = buffer[parse_idx:].strip() except json.JSONDecodeError: # 缓冲区内容不完整,继续读取下一行 break
特殊情况:JSON Lines格式
如果你的文件是每行一个独立JSON对象(即JSON Lines格式),直接逐行解析更高效:
import json rollno_list = [] with open('your_large_file.jsonl', 'r') as f: for line in f: obj = json.loads(line) rollno_list.append(obj['rollno'])
内容的提问来源于stack exchange,提问作者kramer
相关产品推荐
相关产品推荐

