我想读取一个 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)
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
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)
}
Run Code Online (Sandbox Code Playgroud)
如何读取 JSON 文件?有一个更好的方法吗?我在serde文档或其他地方都找不到完整的例子。
您的代码有两个问题。首先,您在解析 JSON 时没有处理错误。就像read_to_string()返回 a一样,如果一切正常,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 type
Run Code Online (Sandbox Code Playgroud)
serde_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)
}
Run Code Online (Sandbox Code Playgroud)
您可以在项目页面上找到此类示例以及更多内容。