跳至主要內容
Lizely

JSON 轉 Rust Struct 工具

從 JSON 推匯出支援 Serde 的 Rust Struct,包含巢狀物件、向量、可選欄位、null 值、重新命名以及標準化識別碼衝突。

隱私權:你的檔案不會離開裝置,所有處理均在瀏覽器本機完成。

使用方式

  1. 1.貼上代表性嚴格的 JSON,並輸入一個 ASCII 根型別名稱。
  2. 2.產生並檢視數值寬度、Option、混合值、巢狀名稱以及 Serde 重新命名。
  3. 3.將結果複製到支援 Serde 的 Rust 專案中,格式化、編譯,並對真實測試案例進行往返驗證。

關於JSON 轉 Rust Struct 工具

JSON 轉 Rust Struct 工具可將一個嚴格的 JSON 樣本轉換為 Rust 程式碼,使用 Serde 的自動匯出功能。貼上一個物件、陣列或基本型別,選擇根型別名稱,產生、檢視並複製。該頁面僅輸出程式碼文字,不會編譯 Rust、安裝套件、執行產生的程式碼,或上傳樣本。

字串轉為擁有型字串(String),布林值轉為 bool,安全的 JSON 整數轉為 i64,其他 JSON 數值轉為 f64。陣列轉為元素型別的 Vec。空陣列使用 Vec<serde_json::Value>,因為沒有樣本證據能確定元素型別。null 轉為 Option<serde_json::Value>,若與觀察到的型別結合則轉為該型別的 Option。

物件轉為公開的結構體,帶有 Serialize、Deserialize 與 Debug 的自動匯出。巢狀物件轉為命名的巢狀結構體。當陣列包含物件時,所有物件中出現的欄位會被視為必填,而至少一個物件中缺失的欄位則會轉為 Option。整數與小數觀察值會合併為 f64。不相容的混合值會回退至 serde_json::Value,而非建立列舉或預設選擇第一種型別。

JSON 關鍵字會轉為 ASCII 險蛇式(snake_case)的 Rust 欄位。首字母大寫、空格、標點符號與連字元會轉為底線。前導數字會加上字首,Rust 關鍵字會加上尾綴底線,衝突的識別碼會加上數字字尾。只要 Rust 欄位與 JSON 關鍵字不同,就會使用 serde 重新命名屬性來保留原始的網路名稱。巢狀型別名稱會根據其路徑安全匯出。

僅從一個樣本無法建立 API 合約。這裡出現的欄位可能在別處為可選;一個小整數可能需要 u64、i128、Decimal 或字串;一個字串可能代表 UUID、日期、URL、列舉、借用切片或機密資料;混合物件可能需要標記的列舉。請參考權威的 API 檔案以及多個成功與失敗的測試案例。

產生的匯入設定假設支援 Serde 的匯出功能。JSON 的解析在目標環境中通常也需要 serde_json。本頁面不引入任何依賴;複製的程式碼應放入一個 Cargo.toml 中明確標記相容版本的專案中。此產生器不會新增套件路徑、模組可見性政策、生命週期、泛型、自訂序列化、禁止未知欄位、預設值、展平、標記或驗證。

必須提供嚴格的 JSON。註解、尾隨逗點、NaN、無限大、BigInt 語法、未定義值以及 JavaScript 物件字面量皆被拒絕。JSON 數值會先由 JavaScript 解析,因此不安全的整數寫法無法精確表示,將回退至不使用 i64 的推導。請保留對精確度敏感的識別碼與小數,並以字串形式保留在原始合約中。

處理範圍受限於 500,000 輸入字元、50,000 值、40 巢狀層次以及 1,000,000 輸出字元。八個外部測試案例固定了 String、i64、f64、bool、Vec、Option、null 與關鍵字重新命名語法。額外測試涵蓋巢狀結構體、標準化衝突處理以及錯誤輸入。格式化並編譯複製的程式碼,然後使用 serde_json 對代表性 JSON 進行往返測試後才會採用。

方法與來源

解析嚴格的 JSON,遞迴推導 Rust 基本型別與容器,將缺少欄位的物件樣本合併為 Option,對於不相容的證據回退至 serde_json::Value,標準化衝突安全的 Rust 識別碼,當網路欄位與 Rust 欄位不一致時加入 Serde 重新命名屬性,並輸出 Serialize/Deserialize 的自動匯出。

常見問題

為何一個混合欄位轉成了 serde_json::Value?
僅憑一個樣本無法保證安全的列舉或轉換規則。值會保留不確定性,直到你定義出真實的合約。
為何一個缺失的欄位會是 Option?
當多個物件樣本中並非所有都包含某個欄位時,Option 代表該欄位的觀察性缺失。更廣泛的生產資料可能需要進一步調整。
輸出的程式碼在沒有依賴的情況下可以編譯嗎?
目標專案需要相容的 Serde 自動匯出支援,通常也需要 serde_json。本頁面僅產生程式碼文字。

開發者工具 使用指南

查看全部