Tool Kumarのツール
JSONをRustの構造体に変換
Debug、Clone、Serialize、Deserializeをderiveした、publicなRustの構造体を生成します。JSONキーはsnake_caseのフィールドになり、元のキー名と異なる場合はserdeのrename属性が付きます。
このツールの使い方
- フィールドが異なるレコードも含めて、代表的なレスポンスを貼り付けます。
- 生成された出力を確認し、必要に応じてルート名を変更します。
- コードをコピーまたはダウンロードし、型が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型にデシリアライズします。