JSON入力

Rust出力

JSONをRustとは?

RustでREST APIを呼び出す際、Serdeで何かをデシリアライズする前に、一致するstruct定義が必要です。特に深くネストされたJSONのstructsを手書きするのは面倒でミスが起きやすいです。このツールはSerde対応のRust structsを自動生成します。JSONを貼り付ければ#[derive(Serialize, Deserialize)]付きのすぐに使えるstructsが手に入り、Cargoプロジェクトに直接追加できます。

SerdeでSerialize/Deserializeのderiveを有効にしてください。Option Typesでオプショナルフィールドを設定できます。出力はserde_json::from_strserde_json::to_stringで動作します。

変換は完全にブラウザで実行されます。JSONはサーバーに送信されません。

JSONをRustが役立つ場面

RustアプリでREST APIを消費する際、型付きstructが必要です。サンプルレスポンスを貼り付けるとSerde対応のstructが得られます。

使い方

1

JSONを貼り付けまたはアップロード

JSONを左のエディタに貼り付けるか、アップロードでファイルを読み込んでください。サンプルで例データを読み込めます。設定パネルでstruct名とオプションを設定してください。

2

生成されたstructを確認

右パネルに生成されたRust structが表示されます。ネストオブジェクトは別structに。配列はVec<T>になります。無効なJSONの場合は先にJSONフォーマッターまたはJSONバリデーターで修正してください。

3

コピーまたはダウンロード

コピーまたはダウンロードでコードを取得してください。Cargo.tomlにserdeserde_jsonを追加してください。

JSONをRustの例

JSONオブジェクトからRust structを生成する例です。

例:加入者レコード

JSON入力:

入力

生成されたRust出力:

出力

JSONをRustが役立つ場面

REST API統合時に必要です。ここに貼り付けるとすぐに使えるSerde互換structが得られます。

2つのJSONをマージするにはJSONマージツールを使用してください。

APIレスポンス、設定ファイル、データエクスポートはJSONが多いです。ここで処理するとRust structを生成できます。

よくある質問

RustでSerdeを使ってJSONをデシリアライズするには?

Cargo.tomlserde = { version = "1.0", features = ["derive"] }serde_json = "1.0"を追加します。structにDeserializeを導出し、serde_json::from_str::<YourStruct>(&json_string)を呼び出します。JSONを貼り付けてここでstructを生成してください。

Rustの#[serde(rename)]は何をしますか?

#[serde(rename = "jsonKey")]はSerdeに特定のJSONキーをRustフィールド名にマッピングするよう指示します。JSONがcamelCase(planNameなど)を使い、Rust structがsnake_case(plan_name)を使う場合に便利です。ジェネレーターは必要に応じて自動的に追加します。

RustでオプションやnullableなJSONフィールドを処理するには?

Option Typesを有効にしてnullableフィールドをOption<T>でラップします。これにより、存在しないかnullのJSONフィールドはエラーを引き起こす代わりにNoneにデシリアライズされます。シリアライズ時にnullフィールドを省略するには#[serde(skip_serializing_if = "Option::is_none")]を追加できます。

JSONデータはサーバーに送信されますか?

いいえ。struct生成はブラウザ内で完全に実行されます。JSONがあなたのマシンを離れることはありません。

ネストされたJSONオブジェクトと配列はどうなりますか?

ネストされたJSONオブジェクトはそれぞれ独自の#[derive(Serialize, Deserialize)]を持つ独立したRust structsになります。配列はそれらのstruct型のVec<T>になります。ジェネレーターは任意の深さのネストに対応します。

関連ツール

Rust JSONはSerdeserde_jsonを参照。JSONはJSON仕様を参照。