RustでstructをJSONにシリアライズしてファイルに保存する


RustでstructをJSONにシリアライズしてファイルに保存する方法です。 StringにしてJSONで保存しています。

Cargo.toml

[package]
name = "swiswiswift"
version = "0.1.0"
edition = "2018"

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

main.rs

use serde::{Serialize, Deserialize};
use std::fs::File;
use std::io::prelude::*;

#[derive(Serialize, Deserialize, Debug)]
struct Pokemon {
    id: i32,
    name: String,
}

fn main() {
    let eevee = Pokemon { id: 133, name: String::from("Eevee") };
    let snorlax = Pokemon { id: 143, name: String::from("Snorlax") };

    let mut pokemons: Vec<Pokemon> = Vec::new();
    pokemons.push(eevee);
    pokemons.push(snorlax);

    let result = write_file(pokemons);
    match result {
        Ok(..) => { println!("Write Finished") }
        Err(err) => { println!("Failed to Write: {}", err) }
    }
}

fn write_file(pokemons: Vec<Pokemon>) -> std::io::Result<()> {
    // serialized
    let serialized: String = serde_json::to_string(&pokemons).unwrap();

    // write
    let mut file = File::create("output/pokemons.json")?;
    file.write_all(serialized.as_bytes())?;
    Ok(())
}

pokemons.json

[{"id":133,"name":"Eevee"},{"id":143,"name":"Snorlax"}]