RustにおけるJSONファイルの読み書き方法:基本から応用まで

Rust

 

はじめに

この記事では、Rustプログラミング言語を使ってJSONファイルの読み込みと書き込みを行う方法を学びます。Rustは、安全性と効率性を兼ね備えたシステムプログラミング言語です。

https://nbaboston.net/2290.html
Next.js(Typescript)+Tauri(Rust)でのデスクトップアプリ制作

必要なクレートの追加

RustでJSON操作を行うためには、`serde`と`serde_json`という2つのクレートが必要です。これらはCargo.tomlファイルに以下のように追加します。

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

JSONデータのデシリアライズ

まずはJSONデータをRustのデータ構造にデシリアライズする方法を見ていきます。次のコードは、JSON文字列をRustの構造体に変換する例です。

use serde::{Deserialize, Serialize};

#[derive(Deserialize)]
struct User {
    name: String,
    age: u8
}

fn main() {
    let data = r#"
        {
            "name": "John Doe",
            "age": 30
        }"#;

    let user: User = serde_json::from_str(data).unwrap();
    println!("Name: {}, Age: {}", user.name, user.age);
}

JSONデータのシリアライズ

Rustのデータ構造をJSON文字列にシリアライズする方法も同様に簡単です。次の例では、Rustの構造体をJSON文字列に変換しています。

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

fn main() {
    let user = User {
        name: "Jane Doe".to_string(),
        age: 28
    };

    let json = serde_json::to_string(&user).unwrap();
    println!("{}", json);
}

JSONファイルの読み書き

次に、ファイルからJSONデータを読み込み、またファイルに書き込む方法を見ていきます。Rustの標準ライブラリを使ってファイル操作を行います。

use std::fs;

fn main() {
    // JSONファイルの読み込み
    let data = fs::read_to_string("user.json").unwrap();
    let user: User = serde_json::from_str(&data).unwrap();
    println!("Name: {}, Age: {}", user.name, user.age);

    // JSONファイルへの書き込み
    let new_user = User {
        name: "Alice".to_string(),
        age: 24
    };
    let json = serde_json::to_string(&new_user).unwrap();
    fs::write("new_user.json", &json).unwrap();
    println!("User data written to new_user.json");
}

エラーハンドリング

Rustでは、エラーハンドリングも重要な要素です。以下は、ファイル読み込みとJSONパースの際に発生する可能性のあるエラーを適切に扱う方法を示しています。

fn main() {
    match fs::read_to_string("user.json") {
        Ok(data) => match serde_json::from_str::(&data) {
            Ok(user) => println!("Name: {}, Age: {}", user.name, user.age),
            Err(e) => eprintln!("Failed to parse JSON: {}", e),
        },
        Err(e) => eprintln!("Failed to read file: {}", e),
    }
}

まとめ

この記事を通じて、Rustを使用してJSONデータの読み書きを行う基本的な手順を学びました。SerdeとSerde_jsonクレートは、RustでのJSON操作において非常に強力であり、Rustの型安全な特性と相まって、データの扱いをより安全かつ効率的にします。

参考リンク:Serde公式ドキュメント