フラットJSONからの基本的なRust構造体

フラットなJSONオブジェクトを #[derive(Serialize, Deserialize)] と snake_case フィールドを持つRust構造体に変換します。すべての serde プロジェクトの出発点です。

Basics

詳細な説明

フラットJSONからRust構造体を生成する

JSONがネストオブジェクトや配列を含まない場合、出力は1つの struct で、各キーがフィールドに1対1で対応します。

JSONの例

{
  "id": 42,
  "name": "Alice",
  "email": "alice@example.com",
  "active": true
}

生成されるRust

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i32,
    pub name: String,
    pub email: String,
    pub active: bool,
}

コンバーターが行った判断

  • id は整数で 32 ビットに収まるため i32 になります。2_147_483_647 を超える値であれば i64 が選ばれます。
  • nameemail はJSON文字列なので、所有権を持つ String にマップされます。所有しない形でデシリアライズしたい場合は &str に変えてライフタイムを付ける選択もありますが、わざわざやる価値があるケースは多くありません。
  • active はJSONブール値なので、そのまま bool になります。
  • 構造体には DebugClone(開発時に便利)に加え、serde_json::from_str / serde_json::to_string をボイラープレートなしで使えるようにする2つの serde マクロが付与されています。

構造体の使用

let json = r#"{ "id": 42, "name": "Alice", ... }"#;
let user: Root = serde_json::from_str(json)?;

ドメインに合った名前を使いたい場合は、Root struct 入力を Root から User に変更してください。出力は即座に再生成されます。

ユースケース

JSONの設定ファイルを読み込むCLI、スクリプト、REST API を叩くバックエンドサービスのほぼすべてが、この基本パターンから始まります。serde 構造体生成における最小単位の実例です。

試してみる — JSON to Rust Struct Converter

フルツールを開く