乐闻世界logo
搜索文章和话题

How I can I lazily read multiple JSON values from a file/stream in Python?

1 个月前提问
1 个月前修改
浏览次数3

1个答案

1

在Python中从文件或流中读取多个JSON值的方法取决于数据的格式和存储方式。通常,处理文件中的多个JSON对象有两种常见场景:

1. JSON数组

如果文件中的JSON对象被存储为一个数组,例如:

json
[ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Cathy", "age": 22} ]

在这种情况下,你可以直接使用Python的json模块来加载整个数组。这里是相应的代码示例:

python
import json # 打开并读取JSON文件 with open('data.json', 'r') as file: data = json.load(file) # data此时是一个字典列表 for item in data: print(f"Name: {item['name']}, Age: {item['age']}")

2. 多个JSON对象

如果文件中有多个独立的JSON对象,每个对象是一个完整的JSON,但这些对象并没有包含在一个JSON数组中,例如:

json
{"name": "Alice", "age": 25} {"name": "Bob", "age": 30} {"name": "Cathy", "age": 22}

这种格式被称为JSON Lines或newline-delimited JSON,针对这种情况,你需要逐行读取文件,并对每行分别进行解析:

python
import json # 打开文件 with open('data.json', 'r') as file: # 逐行读取并解析 for line in file: item = json.loads(line) print(f"Name: {item['name']}, Age: {item['age']}")

高级场景:大文件或流处理

如果你需要从很大的文件或实时数据流中读取JSON数据,那么应当考虑使用如ijson之类的库,该库支持迭代解析,不需要一次性将所有数据加载到内存中。

python
import ijson # 打开大型文件 with open('very_large_data.json', 'r') as file: # 使用ijson逐项提取 objects = ijson.items(file, 'item') for obj in objects: print(f"Name: {obj['name']}, Age: {obj['age']}")

使用这种方法,你可以有效地处理大规模的JSON数据,减少内存使用,提高程序的性能和效率。

2024年8月9日 02:36 回复

你的答案