JSON配列からの Vec<T>

JSON配列を、最初の要素から型推論された Vec<T> に変換します。プリミティブ配列とオブジェクト配列の両方を扱います。

Basics

詳細な説明

JSON配列を Vec にマップする

JSON配列は Rust の Vec<T> になり、T は最初の要素から推論されます。プリミティブ配列とオブジェクト配列を同じパスで処理します。

プリミティブ配列

{
  "tags": ["rust", "serde", "json"],
  "scores": [95, 87, 92]
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub tags: Vec<String>,
    pub scores: Vec<i32>,
}

オブジェクト配列

{
  "users": [
    { "id": 1, "name": "Alice" },
    { "id": 2, "name": "Bob" }
  ]
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub users: Vec<User>,
}

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

要素構造体の名前は配列フィールド名の単数形から導出されます。usersUsercategoriesCategory になります。addressesAddres のように単純化されるため、不規則な複数形(children など)は手動で修正してください。

空配列

空のJSON配列 [] には要素型情報がないため、コンパイル可能性を保つために Vec<serde_json::Value> にフォールバックします。実際の構造が判明した時点で、内側の型を本来のものに置き換えてください。

異種配列

実運用の配列は通常同じ形ですが、サンプルに混在形(フィールド数が違うオブジェクトが混ざっている)がある場合は、最も完全な要素を先頭に並べるか、生成後に欠落しうるフィールドを Option<T> でラップしてください。

ユースケース

ページネーションされたリストエンドポイント、バルクインポートペイロード、CSV由来のJSONダンプはいずれもオブジェクト配列として現れます。Vec<T> + serde の組み合わせで安全な反復とフィールドアクセスがワンライナーで実現できます。

試してみる — JSON to Rust Struct Converter

フルツールを開く