はじめに
この記事では、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公式ドキュメント