Tool Kumarのツール

JSONをRustの構造体に変換

Debug、Clone、Serialize、Deserializeをderiveした、publicなRustの構造体を生成します。JSONキーはsnake_caseのフィールドになり、元のキー名と異なる場合はserdeのrename属性が付きます。

このツールの使い方

  1. フィールドが異なるレコードも含めて、代表的なレスポンスを貼り付けます。
  2. 生成された出力を確認し、必要に応じてルート名を変更します。
  3. コードをコピーまたはダウンロードし、型がAPI仕様と合っているか確認します。

実行例

この出力は組み込みの変換機能で生成したものです。2つのitemのpriceからは浮動小数点数のフィールドが、nullと文字列のnoteからはnull許容のフィールドが推論されます。

入力

{
  "user-id": 42,
  "profile": {
    "city": "London",
    "created_at": "2026-10-14T09:00:00Z"
  },
  "items": [
    {
      "price": 12,
      "note": null
    },
    {
      "price": 12.5,
      "note": "gift"
    }
  ]
}

出力

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    #[serde(rename = "user-id")]
    pub user_id: i64,
    pub profile: Profile,
    pub items: Vec<Item>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Profile {
    pub city: String,
    pub created_at: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Item {
    pub price: f64,
    pub note: Option<String>,
}

serde_jsonで構造体を使う

Cargo.tomlで、依存関係にあるserdeのderiveフィーチャーを有効にし、serde_jsonを追加します。構造体をモジュールにコピーし、レスポンスをデシリアライズします。

サンプルに基づく推論では、アプリケーションのバリデーションルールは設定されません。デコードしたモデルを信頼できる入力として扱う前に、値の範囲、必須フィールド、タイムスタンプを確認してください。

let model: Root = serde_json::from_str(&response_body)?;
let text = serde_json::to_string(&model)?;

オプションと注意点

  • 配列はVecに、型のわかるnull許容フィールドはOptionになります。一部のレコードに存在しないフィールドには、skip_serializing_if = "Option::is_none"が追加されます。
  • 不明な値、nullのみの値、型が混在する値にはserde_json::Valueを使います。リネームでは記号もそのまま保持され、Rustの予約語には可能な限りraw識別子を使います。
  • 整数はi64、符号付き64ビットを超える場合はi128になります。小数はf64です。非常に大きな整数を受け付ける前に、serde_jsonの対応状況と数値の範囲を確認してください。
  • 日付はStringのままです。金額を正確な10進数で扱うには、専用の型とシリアライザーが必要です。そうしたルールはJSONのサンプルからは得られません。

標準でプライバシーを保護

ドキュメントはこのブラウザー内に残ります。Tool Kumarは、解析、変換、ダウンロードファイルの作成を端末内で行います。アカウント登録やアップロードの手順はありません。

JSONをRustの構造体に変換のよくある質問

serdeのderiveは含まれますか?
はい。serde::{Deserialize, Serialize}をインポートし、構造体にDebug、Clone、Serialize、Deserializeをderiveします。
JSONのキー名は保持されますか?
はい。必要な箇所にserdeのrename属性を出力します。フィールドごとの対応付けを減らせる場合は、rename_all = "camelCase"を使うこともあります。
nullや存在しない値はどう表現されますか?
型のわかるnull許容フィールドや、存在しないことがあるフィールドにはOption<T>を使います。不明なフィールドやnullのみのフィールドにはserde_json::Valueを使い、これ自体がJSONのnullを保持できます。
生成結果をserde_jsonでデシリアライズできますか?
はい。Rustプロジェクトにderiveフィーチャーを有効にしたserdeとserde_jsonを追加し、生成されたRoot型にデシリアライズします。

関連ツール

JSONをGoの構造体に変換、JSONをJavaのrecordに変換、JSON Schema生成。