JSON から Rust 構造体へ(serde)
JSON から Rust の構造体を生成します。serde の Serialize/Deserialize derive、スネークケースのフィールド、rename 属性、null 用の Option、配列用の Vec に対応。無料。
serde(derive 有効)と serde_json クレートが必要です。フィールドは snake_case で、JSON キーと異なる場合は #[serde(rename)] を付けます。
すべてブラウザ内で実行されます。データがアップロードされることはありません。
関連ツール
すべて表示JSON から Rustとは?
JSON を貼り付けると、serde でデシリアライズできる Rust の struct 定義が得られます。すべての構造体は Debug, Clone, Serialize, Deserialize を derive し、フィールド名はスネークケースになり、必要な場合は #[serde(rename = "…")] で元のキーを保持します。
JSON から Rustの使い方
- JSON 入力 に JSON のサンプルを貼り付けます(サンプルを読み込む や ファイルを開く も使えます)。
- ルート型の名前 を設定します(既定は
Root)。 - 生成された Rust のコードをコピーするか、ダウンロード してファイルとして保存します。
例
{"id":1,"name":"A","tags":["x"]} use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
pub id: i64,
pub name: String,
pub tags: Vec<String>,
} JSON から Rustを使うべき場面
JSON を読む Rust のクライアントや CLI を書くときに使います。サンプルからは実際の範囲が分からないため、あとで型を調整してください(たとえば小さなカウントには u32、タイムスタンプには chrono の型など)。
JSON から Rustの仕組み
サンプルを再帰的にたどり、各位置で見つかった型を集めます。オブジェクトの配列は 1 つの型にまとめられ、一部の要素にないキーはオプショナル、どこかで null になるキーは null 許容になります。整数と小数が混在する場合は浮動小数点型になり、それ以外で型が混在する場合は動的な型にフォールバックします。入れ子のオブジェクトは名前付きの型になり(キーのパスカルケースで、配列のキーは単数形にします:orders → Order)、名前が衝突した場合は数字の接尾辞が付きます。Rust の出力では、整数は i64、小数は f64、文字列は String、真偽値は bool、配列は Vec<T>、null 許容の値は Option<T>、動的な値や null のみの値は serde_json::Value に対応します。一部のサンプルにないフィールドは、#[serde(default, skip_serializing_if = "Option::is_none")] 付きの Option<T> になります。type のようなキーワードは raw 識別子(r#type)として書かれます。
一般的な使用例
- reqwest と serde で REST API のレスポンスをデシリアライズする
- CLI ツール用に JSON の設定ファイルをモデル化する
- Webhook ハンドラー用の型を作る
- Rust の統合テスト用にテストデータを変換する
よくある質問
どのクレートが必要ですか?
derive 機能付きの serde と serde_json です。serde = { version = "1", features = ["derive"] } と serde_json = "1" を使います。
なぜ serde_json::Value になるのですか?
サンプル内でキーの型が混在しているか、常に null の場合に使われます。具体的な Rust の型を安全に選べないためです。
なぜ r#type なのですか?
type は Rust のキーワードです。raw 識別子の構文を使うと、フィールド名として使いつつ、serde が JSON のキーと対応付けられます。