我想从Python中的文件/流中读取多个JSON对象,一次一个.不幸的是json.load(),.read()直到文件结束; 似乎没有任何方法可以使用它来读取单个对象或懒惰地迭代对象.
有没有办法做到这一点?使用标准库是理想的,但如果有第三方库,我会使用它.
目前我将每个对象放在一个单独的行上并使用json.loads(f.readline()),但我真的不想这样做.
import my_json as json
import sys
for o in json.iterload(sys.stdin):
print("Working on a", type(o))
Run Code Online (Sandbox Code Playgroud)
{"foo": ["bar", "baz"]} 1 2 [] 4 5 6
Run Code Online (Sandbox Code Playgroud)
$ python3.2 example.py < in.txt
Working on a dict
Working on a int
Working on a int
Working on a list
Working on a int
Working on a int
Working on a int
Run Code Online (Sandbox Code Playgroud) 我有一个 5GB JSON 文件,它是具有固定结构的对象数组:
[
{
"first": "John",
"last": "Doe",
"email": "john.doe@yahoo.com"
},
{
"first": "Anne",
"last": "Ortha",
"email": "anne.ortha@hotmail.com"
},
....
]
Run Code Online (Sandbox Code Playgroud)
我知道我可以尝试使用如何使用 Serde 使用顶级数组反序列化 JSON?中所示的代码来解析此文件。:
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct User {
first: String,
last: String,
email: String,
}
let users: Vec<User> = serde_json::from_str(file)?;
Run Code Online (Sandbox Code Playgroud)
有多个问题:
User(我不想要这样)我尝试了如何从 Rust 中的文件/流中延迟读取多个 JSON 值?但它会在打印任何内容之前读取整个文件,并在循环内立即打印整个结构。我期待循环中一次有一个对象:
理想情况下,(已解析的)用户对象的解析和处理应该在两个单独的线程/任务/例程中同时发生,或者通过使用通道同时发生。