跳至內容

JSON 轉 Rust

從 JSON 範例生成附 serde derive 的 Rust struct。

輸入

這個工具的用途

從 JSON 樣本產生帶 #[derive(Serialize, Deserialize)]Rust struct——可為 null 欄位使用 Option<T>、巢狀物件變為巢狀 struct。底層使用 quicktype,完全在你的瀏覽器內運作。

使用步驟

貼上 JSON(或載入範例),即可在右側讀到 Rust struct。每個巢狀物件成為帶 #[derive(Serialize, Deserialize)] 的獨立 struct。

輸入: {"id":42,"name":"devsmiths","createdAt":"2024-03-11T08:24:00Z","stars":1280,"public":true,"contributors":[{"login":"ada","commits":51,"admin":true},{"login":"linus","commits":33,"admin":false}],"homepage":null}

限制與邊界情況

  • 單樣本推論:你樣本中出現的每個欄位都會成為型別的一部分。樣本中不存在的欄位不會自動變成 optional——若每個欄位都應為 nullable,請在選項面板切換 all optional
  • 產生的程式碼是起點。命名遵循各語言慣例,但通常你會想手動重新命名型別並收緊聯合型別。
  • 第一次產生需 1–3 秒,因為 quicktype 引擎下載到 Web Worker。後續產生幾乎即時。
  • 非 TypeScript 目標在編輯器面板中沒有語法高亮(Go / Python / Rust 等的 CodeMirror 語言套件未打包以保持頁面輕量)。Copy / Download 仍能輸出正確的檔案內容。
  • 輸入必須為合法 JSON——若含尾隨逗號、單引號或註解,請先用JSON Repair;若只是想快速檢查,可用Validator
  • 延伸閱讀:實務上的 JSON 轉 TypeScript——完整工作流程,包含重新命名與收緊步驟。

常見問題

支援哪些語言?
八種:TypeScript、Go、Python、C#、Rust、Java、Swift、Kotlin。可從上方分頁切換——URL 會變為 /json/types/<language>,輸出會就地重新產生。
為什麼第一次產生會比較慢?
quicktype 引擎(約 700 KB)會在首次使用時載入 Web Worker。之後在本次 session 中就被快取——後續產生幾乎是即時。
我的 JSON 會被上傳嗎?
不會。產生器完全在你的瀏覽器內的 Web Worker 中運作。資料不會傳送到伺服器。
可以使用多份 JSON 樣本嗎?
目前還不行——目前版本只從單一樣本推論型別,因此樣本中不存在的欄位會以「以觀察到的型別為必填」處理。多樣本推論(聯合型別、跨樣本的選用偵測)已在 roadmap 上。
會產生序列化程式碼嗎?
在目標語言支援的情況下:Go 會帶 `json:` tag、Rust 會帶 serde derives、Java 會帶 Jackson annotations、C# 會帶 attributes、Swift 符合 Codable。TypeScript 輸出純 interface。若每個欄位都應為 nullable,可切換「all optional」。
輸出不完美——可以修嗎?
可以——請把輸出當成起點。重新命名型別、收緊聯合、明確標記 nullable。產生器具有保守的觀點;命名與意圖人類永遠勝出。