跳到主要内容

JSON 数据处理

JSON 是网络接口中最常见的数据格式之一。Rust 中通常使用 serdeserde_json 处理 JSON。

添加依赖

Cargo.toml
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"

解析 JSON

src/main.rs
use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct SensorData {
device: String,
temperature: f32,
}

fn main() -> Result<(), serde_json::Error> {
let text = r#"{"device":"sensor-1","temperature":26.5}"#;
let data: SensorData = serde_json::from_str(text)?;

println!("{data:?}");
Ok(())
}

生成 JSON

use serde::Serialize;

#[derive(Serialize)]
struct Message {
status: String,
}

let msg = Message {
status: "ok".to_string(),
};

let text = serde_json::to_string(&msg).unwrap();
println!("{text}");

字段名不一致

如果 JSON 字段和 Rust 字段命名不同,可以使用属性:

#[derive(Deserialize)]
struct User {
#[serde(rename = "user_name")]
user_name: String,
}

小结

serde 让你用 Rust 结构体表达数据形状。解析 JSON 时,你越早定义清楚结构体,后面的业务代码越不容易混乱。