JSON 轉 Rust 產生器

JSON 輸入

正在載入編輯器…

生成的 Rust

Configuration

輸入 JSON 資料以產生 Rust struct

具備 ownership 的記憶體安全 struct

如何將 JSON 轉換為 Rust – 步驟指南

使用此 JSON 轉 Rust 產生器,可從 JSON 範例產生 Rust struct,適合服務與 CLI,並可搭配 serde 使用。

  1. 步驟 1 – 貼上 JSON 範例

    • 將具有代表性的 JSON 物件或陣列貼到左側編輯器。
    • 盡量包含巢狀物件、陣列與可為 null 的欄位,方便正確推斷型別。
    • 使用 匯入 從檔案、URL 或示例資料載入 JSON。
  2. 步驟 2 – 選擇 Rust struct 選項

    • 設定根 Struct Name(例如 Root)。
    • 決定可選欄位如何處理(Option<T>),未知型別如何處理(serde_json::Value)。
    • 確認命名與 serde 屬性,讓 JSON key 正確對應到欄位。
  3. 步驟 3 – 檢查產生的程式碼

    • 確認欄位命名、型別推斷,以及陣列/物件的對應方式是否符合預期。
    • 依需求調整 根型別名稱、null 處理策略與可選的框架選項。
    • 若某些欄位推斷不準確,優化 JSON 範例後重新產生。
  4. 步驟 4 – 搭配 serde 使用 struct

    • 加入 serdeserde_json 相依套件,並啟用 derive 巨集。
    • 使用 serde_json::from_str 將 JSON 反序列化為根 struct。
    • 需要更強保證時,反序列化後再做額外驗證。
  5. 步驟 5 – 複製或下載

    • 將輸出複製到專案中,或下載成檔案。
    • 執行格式化/程式碼檢查工具,讓風格與專案一致。
    • 若目標語言需要序列化/解析函式庫,請在專案中加入相依套件。

快速提示

  • 可缺失或可為 null 的欄位優先使用 Option<T>
  • 只有在時間格式穩定時才引入 chrono 等時間型別。
  • 讓 DTO 與內部領域型別分離,方便演進與相容。
範例輸出(簡化)
// JSON 輸入
{
  "id": 123,
  "name": "Maeve Winters",
  "email": "[email protected]",
  "active": true,
  "roles": ["admin", "editor"],
  "metadata": { "plan": "pro" },
  "createdAt": "2024-03-01T10:15:00Z",
  "score": 99.5,
  "notes": null
}

// 產生的 Rust struct(簡化)
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct Metadata {
  pub plan: String,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Root {
  pub id: i64,
  pub name: String,
  pub email: Option<String>,
  pub active: bool,
  pub roles: Vec<String>,
  pub metadata: Metadata,
  pub createdAt: String,
  pub score: f64,
  pub notes: serde_json::Value,
}

相關 JSON 與 Rust 工具

探索更多可與本 JSON 轉 Rust 產生器搭配使用的 JSON 與 Schema 工具。

常見問題

支援哪些 Rust 特性?

產生器會建立具備正確 ownership 的 Rust struct,支援 Serde 序列化/反序列化,並遵循 Rust 命名慣例與記憶體安全保證。

可以產生 Serde 相容的 struct 嗎?

可以!選擇「Serde」框架可產生帶有 #[derive(Serialize, Deserialize)] 的 struct,使用 serde crate 自動進行 JSON 序列化。

Option 處理如何運作?

Rust 產生器預設使用 Option<T> 來表示可為 null 的欄位,符合 Rust ownership 模型,並提供明確的 null 處理方式。

Borrowing 與 lifetimes 呢?

產生的 struct 使用 owned types(例如 String 而非 &str)以避免 lifetime 複雜度,讓使用更簡單,同時保持 Rust 的安全保證。

JSON 轉 Rust 產生器 | JSONSwiss