開発者 / 種類

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%ブラウザ内でローカル実行します。

カテゴリ
開発者ツール
実行回数
ブラウザ内で
コスト
無料 · 登録不要
提供状況
すぐに使えます
JSONをRustに変換ローカル処理

完全にブラウザ内で実行します

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を保持してください。

使い方

  1. JSONサンプルを貼り付けます。いくつかの典型的なレコードを含む配列がおすすめです。
  2. トップレベルの型名を入力し、シリアライズ時にNoneのフィールドを省略するかどうかを選択します。
  3. 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指定を置き換えられます。

無料ツール · ブラウザ内で · アカウント不要