開發者 / 類型
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 進行編譯,並以其範例完成反序列化。 全程在瀏覽器中於本機執行,檔案不會上傳至伺服器。
- 分類
- 開發者工具
- 使用次數
- 在瀏覽器中
- 費用
- 免費・免註冊
- 可用狀態
- 可立即使用
全程在瀏覽器中執行
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)]即可拒絕未知鍵。
Option與遺漏的鍵
對於Option欄位,遺漏的鍵和null值都會反序列化為None。如果需要區分兩者,請搭配serde_with crate使用Option<Option<T>>,或讓該欄位保留為serde_json::Value。
使用方式
- 貼上 JSON 範例,最好是包含數筆典型記錄的陣列。
- 命名頂層型別,並選擇序列化時是否省略 None 欄位。
- 將結構複製到 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")],就能取代個別的重新命名。
免費工具・使用在瀏覽器中次・免註冊