</>YZIF
博客

JSON 转 Rust 结构体:Serde 序列化一键生成

2026-06-18

为什么选择 Rust + Serde?

Rust 强大的类型系统和 Serde 出色的序列化框架构成了处理 JSON 的无敌组合。但手动为复杂 JSON 编写带 Serde 属性的结构体定义可能很繁琐。这就是 JSON 转 Rust 生成器的用武之地。

实际示例:云服务商 API 响应

以下是云服务商 API 的典型 JSON 响应:

{
  "server_id": "srv-a1b2c3",
  "display_name": "生产 Web 服务器",
  "status": "running",
  "region": "us-east-1",
  "instance_type": "t3.large",
  "vcpus": 2,
  "memory_mb": 8192,
  "disk_gb": 100,
  "tags": ["production", "web", "backend"],
  "created_at": "2026-01-15T08:30:00Z",
  "ip_addresses": {
    "public": "203.0.113.42",
    "private": "10.0.1.50"
  },
  "monitoring_enabled": true,
  "backup_config": {
    "enabled": true,
    "schedule": "0 3 * * *",
    "retention_days": 30
  }
}

关键 Serde 属性说明

YZIF 的 JSON 转 Rust 工具 智能应用以下 Serde 属性:

- **`rename`** — 将 snake_case JSON 键映射到 Rust 字段名 - **`default`** — 当字段在 JSON 中缺失时提供默认值 - **`skip_serializing_if`** — 在序列化输出中省略符合条件的字段 - **`deny_unknown_fields`** — 遇到未知字段时反序列化失败(严格模式) - **`Option`** — 自动用于可空或可选字段

高级功能

嵌套 Option 处理
#[derive(Debug, Serialize, Deserialize)]
struct Config {
    #[serde(default)]
    pub timeout_seconds: Option,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub fallback_url: Option,
}

Flatten 实现类似继承的模式
#[derive(Debug, Serialize, Deserialize)]
struct ApiResponse {
    pub status: String,
    #[serde(flatten)]
    pub data: ExtraData,
}

自动类型推断

YZIF 工具不仅生成 `String`、`i64` 和 `bool` 等基本类型,还能正确处理:
- **嵌套对象** → 自动生成子结构体
- **JSON 数组** → `Vec` 带正确类型参数
- **可选字段** → `Option` 包装
- **时间格式** → 保留为 `String` 或可自定义为 `chrono::DateTime`

立即尝试

访问 YZIF 的 JSON 转 Rust 工具,从任何 JSON 即时生成支持 Serde 的 Rust 结构体。只需粘贴和复制,无需手动输入。