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の使い方

  1. JSON 入力 に JSON のサンプルを貼り付けます(サンプルを読み込む や ファイルを開く も使えます)。
  2. ルート型の名前 を設定します(既定は Root)。
  3. 生成された 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 のキーと対応付けられます。

他のカテゴリを見る