使用islice处理ijson返回列表嵌套,引发内存溢出求助
问题原因与解决方法
核心问题:ijson的prefix参数使用错误
你的JSON结构是外层一个大列表包裹所有文档,而你用了prefix='',这会让ijson把整个顶层列表作为单个元素返回,自然会一次性加载18万条数据到内存,直接触发OOM。
正确用法
ijson通过prefix指定要迭代的JSON元素路径,对于数组内的元素,默认路径前缀是item。你需要把prefix改成'item',这样迭代器会逐个返回列表里的单个文档:
from itertools import islice import ijson with open('your_large_file.json', 'r') as f: # 逐个迭代列表中的单个文档 docs = ijson.items(f, prefix='item') # 取前10000条 for doc in islice(docs, 10000): # 处理单个文档 print(doc)
额外说明
如果你的JSON结构更复杂(比如嵌套数组),可以用ijson的parse方法查看具体路径,确认需要的元素前缀。但针对当前的顶层列表结构,prefix='item'完全够用。
内容的提问来源于stack exchange,提问作者czr_RR
相关产品推荐
相关产品推荐

