開発者 / 種類
JSONからRust構造体への変換ツール
JSONサンプルを、serdeのSerializeとDeserializeをderiveするRust構造体に変換します。フィールドはsnake_caseになり、名前の変換、欠落またはnullのキーへのOption、配列へのVecにも対応します。
JSONからRust構造体への変換ツール: 各オブジェクトは、公開フィールドを持つ構造体になります。キーはsnake_caseになり、JSONでの表記と異なる場合は#[serde(rename = "…")]が付きます。typeなどのRustキーワードはraw identifier(r#type)になり、serdeが自動的に元の名前へ対応付けます。レコードによって欠落またはnullになっているキーはOption<T>になり、型を明確に判定できない値はserde_json::Valueになります。複数のサンプルに対する出力はコンパイルされ、serde 1でサンプルのデシリアライズも検証されています。 サーバーへのファイルアップロードは一切なく、100%ブラウザ内でローカル実行します。
- カテゴリ
- 開発者ツール
- 実行回数
- ブラウザ内で
- コスト
- 無料 · 登録不要
- 提供状況
- すぐに使えます
完全にブラウザ内で実行します
Rust
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Address {
pub city: String,
pub zip_code: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub id: i64,
pub user_name: String,
pub avatar_url: String,
pub score: f64,
pub tags: Vec<String>,
pub address: Address,
pub manager_id: Option<i64>,
#[serde(default)]
pub nickname: Option<String>,
}
pub type UserList = Vec<User>;
serde(derive機能付き)とserde_jsonクレートが必要です。キー名が異なる場合、フィールド名は#[serde(rename)]を付けてsnake_caseになります。一部のオブジェクトにないキーやnullのキーはOptionになります。サンプルに小数が含まれない限り、数値はi64になります。
データの読み書き
serde_json::from_str::<Root>(&text)?でデシリアライズし、serde_json::to_string(&value)?でシリアライズします。入力に含まれる未知のキーはデフォルトで無視されます。拒否するには、構造体に#[serde(deny_unknown_fields)]を追加してください。
同じサンプルをGoで扱う方法はJSON to Goをご覧ください。先にサンプルを整形するには、JSON formatterを使用してください。
Optionと欠落したキー
欠落したキーとnull値はどちらも、OptionフィールドではNoneにデシリアライズされます。両者を区別する必要がある場合は、serde_withクレートでOption<Option<T>>を使うか、そのフィールドにserde_json::Valueを保持してください。
使い方
- JSONサンプルを貼り付けます。いくつかの典型的なレコードを含む配列がおすすめです。
- トップレベルの型名を入力し、シリアライズ時にNoneのフィールドを省略するかどうかを選択します。
- serdeとserde_jsonが必要なクレートに構造体をコピーします。
プライバシーと制限事項
JSONはブラウザ内で変換され、アップロードされることはありません。
関連ツール
よくある質問
必要なクレートはどれですか?
derive機能を有効にしたserdeとserde_jsonが必要です。Cargo.tomlには、serde = { version = "1", features = ["derive"] }とserde_json = "1"を記述します。
なぜi64とf64なのですか?
あらゆるJSONの数値を安全に保持できるためです。値の範囲がわかっている場合は、u32、u8、またはf32に狭めてください。
代わりに#[serde(rename_all)]を使用できますか?
はい。camelCaseなど、すべてのキーが同じ規則を使用している場合は、構造体に1つ#[serde(rename_all = "camelCase")]を指定することで、個別のrename指定を置き換えられます。
無料ツール · ブラウザ内で · アカウント不要