🐻
RustでJSONを扱う(serde_json) 基本
serde_json
Rust
で JSON
を扱うとなると serde_json
がよく使われる。
クレートの追加
cargo add serde
cargo add serde_json
後述の"構造体に直接JSONを入れる"ようなことをする場合、serdeは
cargo add serde --features="derive"
とする。
Deserialize
構造体に基づいたJSONを読み込み、構造体に直接代入する。
構造体
以下のような構造体を準備する。
Stringの "name" と i32 の "height" をフィールドに持つ "Sample" という構造体である。
#[derive(Deserialize)]
struct Sample {
name: String,
height: i32,
}
JSON
ここに上の構造体に合うようなJSONな文字列 変数名: "BABEL" を準備する。
const BABEL: &str = r#"{
"name": "Enoshima Sea Candle",
"height": 60
}
"#;
Deserialize
serde_json::from_str
を使って文字列を "Sample" に変換する
fn main() {
let json_sample: Result<Sample, serde_json::Error> = from_str::<Sample>(BABEL);
match json_sample {
Ok(o) => {
println!("Success to perse BABEL");
println!(" {} (height: {}m)", o.name, o.height);
}
Err(e) => {
println!("Failed to perse BABEL");
println!(" Error: {}", e);
}
}
}
出力
JSONを構造体へ変換し、以下のように出力することができる。
Success to perse BABEL
Enoshima Sea Candle (height: 60m)
また挙動として、未知のキーが含まれていてもパースは成功する。
しかし、 "キーが存在しない" 場合や、"JSONのファイルや文字列が壊れている" 場合は失敗する。
Discussion