使用Rust解析Json文件
高效、安全的Json解析
假如你需要处理一个简单的Json文件,内容为宠物的名字与出生日期
{
"name": "Shawn",
"birthday": 2022
}
可以借助Serde Json来实现!
解析简单的Json文件
使用Cargo创建新项目
cargo new json-demo
然后引入Serde Json以及依赖项
cargo add serde-json
cargo add serde --features=derive
Serde Json支持将Json内容解析为Rust的数据类型struct
,这样可以充分利用Rust语言的类型推断等特性,推荐使用这种方式。
在 src/main.rs
中,定义一个与Json文件结构相同的 struct
use serde::Deserialize;
#[derive(Deserialize)]
struct Pet {
name: String,
birthday: i64,
}
注意 #[derive(Deserialize)]
为Serde提供的trait。
然后就可以在main函数中实现文件解析了
use serde::Deserialize;
use std::fs::File;
use std::io::prelude::*;
#[derive(Deserialize)]
struct Pet {
name: String,
birthday: i64,
}
fn main() {
let mut file = File::open("sample.json").unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
let cat: Pet = serde_json::from_str(&contents).unwrap();
println!("{} the cat was born in {}.", cat.name, cat.birthday);
}
💡
这个简单例子使用了unwrap。实际情况中请妥善处理异常。
最终的输出为
Shawn the cat was born in 2022.
这是一个非常简单的例子。实际状况中,Json文件多存在多层级的嵌套结构。这种情况该如何处理?