如何用ijson处理超大JSON文件:提取公共值并遍历条目
处理超大JSON:结合ijson提取公共值与遍历条目
可以通过两次解析文件的方式结合kvitems和items,既避免使用events API,又能高效处理超大文件:
import ijson with open('large_file.json', 'r') as f: # 第一步:读取并保存commonVal common_val = None for prefix, key, value in ijson.kvitems(f, ''): if key == 'commonVal': common_val = value break # 拿到目标值后立即停止,避免读取后续大数组 # 重置文件指针到开头,准备遍历entries f.seek(0) # 第二步:逐个遍历entries中的条目并拼接结果 for entry in ijson.items(f, 'entries.item'): print(f"commonVal: {common_val}, bar: {entry['bar']}")
关键说明:
- 第一次解析用
kvitems遍历根节点的键值对,找到commonVal就停止,不会加载后续的entries数组,内存占用极低。 - 调用
f.seek(0)重置文件指针后,第二次用items按路径entries.item逐个提取数组元素,每个元素都是完整的条目对象,适配实际复杂的条目结构。 - 整个过程无需将整个JSON载入内存,完全符合超大文件的处理需求。
内容的提问来源于stack exchange,提问作者aioobe
相关产品推荐
相关产品推荐

