【发布时间】:2021-08-03 18:31:08
【问题描述】:
我有一个 5GB 的 JSON 文件,它是一组具有固定结构的对象:
[
{
"first": "John",
"last": "Doe",
"email": "john.doe@yahoo.com"
},
{
"first": "Anne",
"last": "Ortha",
"email": "anne.ortha@hotmail.com"
},
....
]
我知道我可以尝试使用How can I deserialize JSON with a top-level array using Serde?中显示的代码解析这个文件:
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)?;
有多个问题:
- 首先将其作为一个整体读取
- 读取为字符串后,将其转换为
User结构的向量(我不希望这样)
我试过How I can I lazily read multiple JSON values from a file/stream in Rust?,但它会在打印任何内容之前读取整个文件,并在循环内一次打印整个结构。我期待在循环中一次一个对象:
理想情况下,(已解析的)用户对象的解析和处理应该同时在两个单独的线程/任务/例程中或通过使用通道进行。
【问题讨论】:
-
但它会在打印任何内容之前读取整个文件——你如何验证这一点?
-
添加截图
-
假设它从循环中打印出两个项目——你怎么知道它是否读入了整个文件?
-
好的,不管文件有多大,这条线都没有问题。
println!("Before reader"); let iterator = deserializer.into_iter::<serde_json::Value>(); println!("after reader");- 现在的问题是整个文件内容在第一次循环迭代时立即打印,所以我不能单独获取每个对象。 - & 除了上面提到的地方,我找不到在任何其他地方加载整个文件的任何用法
标签: rust serde-json