Serde

Struct を Json など別の構造体へ変換するのに便利なクレートです。以下の2つを使うのでCargo.tomldependenciesなどへ追加します。

[dependencies]
serde = "1.0.104"
serde_json = "1.0.44"

Json

Struct を Json に変換

対象の Struct にはserde::Serializeを持たせます。

#[derive(serde::Serialize)]
struct User {
  name: String,
}

後はインスタンス化したUserserde_json::to_stringさせます。

let user = User {
  name: "nju33".into(),
};

println!("{}", serde_json::to_string(&user).unwrap());
// {"name":"nju33"}

Json (文字列)を Struct に変換

Struct を満たす Json 文字列を用意し、serde_json::from_strへそれを渡します。

let json = r#"{"name":"nju33"}"#;

println!("{:?}", serde_json::from_str::<User>(json).unwrap());
// User { name: "nju33" 

Json 文字列はserde_json::jsonマクロを使うと JavaScript のオブジェクト定義のように書けます。

let json = serde_json::json!({
  "name": "nju33"
});

println!(
  "{:?}",
  serde_json::from_str::<User>(&json.to_string()).unwrap()
);