開發者 / 類型

JSON 轉 Rust 結構轉換器

將 JSON 範例轉換成可 derive serde 的 Serialize 和 Deserialize 的 Rust 結構,並處理 snake_case 欄位、重新命名、遺漏或 null 鍵的 Option,以及陣列的 Vec。

JSON 轉 Rust 結構轉換器: 每個物件都會變成具有公開欄位的結構。鍵會轉成 snake_case;當 JSON 拼寫不同時,會加入 #[serde(rename = "…")],而 type 等 Rust 關鍵字則會變成原始識別字(r#type),serde 會自動映射回原本的名稱。在部分記錄中遺漏或為 null 的鍵會變成 Option<T>,而沒有明確型別的值則會變成 serde_json::Value。多個範例的輸出已使用 serde 1 進行編譯,並以其範例完成反序列化。 全程在瀏覽器中於本機執行,檔案不會上傳至伺服器。

使用次數
在瀏覽器中
費用
免費・免註冊
可用狀態
可立即使用
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 crate。鍵名不同時,欄位名稱會轉為 snake_case,並使用#[serde(rename)];部分物件中缺少或為 null 的鍵會轉為 Option。除非範例包含小數,否則數字會使用 i64。

讀取與寫入資料

使用serde_json::from_str::<Root>(&text)?反序列化,並使用serde_json::to_string(&value)?序列化。輸入中的未知鍵預設會被忽略;在結構中加入#[serde(deny_unknown_fields)]即可拒絕未知鍵。

如要查看Go的相同範例,請參閱JSON轉Go;如要先整理範例,請使用JSON格式化工具。

Option與遺漏的鍵

對於Option欄位,遺漏的鍵和null值都會反序列化為None。如果需要區分兩者,請搭配serde_with crate使用Option<Option<T>>,或讓該欄位保留為serde_json::Value。

使用方式

  1. 貼上 JSON 範例,最好是包含數筆典型記錄的陣列。
  2. 命名頂層型別,並選擇序列化時是否省略 None 欄位。
  3. 將結構複製到 crate 中;該 crate 需要 serde 和 serde_json。

隱私與限制

JSON 會在您的瀏覽器中轉換,絕不會上傳。

相關工具

常見問題

需要哪些 crate?

需要啟用 derive 功能的 serde,以及 serde_json:在 Cargo.toml 中加入 serde = { version = "1", features = ["derive"] } 和 serde_json = "1"。

為什麼是 i64 和 f64?

它們可以安全容納任何 JSON 數字。如果您知道數值範圍,可以將型別縮小為 u32、u8 或 f32。

可以改用 #[serde(rename_all)] 嗎?

可以:如果每個鍵都採用相同慣例,例如 camelCase,只要在結構上加入一個 #[serde(rename_all = "camelCase")],就能取代個別的重新命名。

免費工具・使用在瀏覽器中次・免註冊