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,
}
#[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,
}
#[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 结构体。只需粘贴和复制,无需手动输入。