我想读取一个JSON文件并打印它的内容。我正在尝试使用serde板条箱,但我不明白为什么它不能工作:
use serde_json;
use std::fs;
fn main() {
let path = "./src/input.json";
let data = fs::read_to_string(path).expect("Unable to read file");
let res = serde_json::from_str(&data);
println!("{}", res)
}我得到的错误是:
the trait std::fmt::Display is not implemented如何读取JSON文件?有没有更好的方法来做这件事?我在serde文档或其他地方都找不到完整的示例。
发布于 2020-08-30 21:41:58
您的代码有两个问题。首先,在解析JSON时没有处理错误。就像read_to_string()返回一个Result,在一切正常的情况下,你必须使用expect()来获取底层的值,同样的道理也适用于serde_json::from_str()。
添加缺失的expect()会导致第二个问题,编译器会报错:
error[E0282]: type annotations needed
--> src/main.rs:7:9
|
7 | let res = serde_json::from_str(&data).expect("Unable to parse");
| ^^^ consider giving `res` a typeserde_json是强类型的,可以将JSON反序列化为您准备的Rust类型。如果只想检查非类型化的JSON,可以使用serde_json::Value (playground):
use serde_json;
use std::fs;
fn main() {
let path = "./src/input.json";
let data = fs::read_to_string(path).expect("Unable to read file");
let res: serde_json::Value = serde_json::from_str(&data).expect("Unable to parse");
println!("{}", res)
}您可以在project page上找到此类示例和更多内容。
https://stackoverflow.com/questions/63657897
复制相似问题