Tool Kumar 工具

JSON 转 Rust 结构体

生成派生 Debug、Clone、Serialize 和 Deserialize 的公有 Rust 结构体。JSON 键会变成 snake_case 字段;当传输时的键名不同时,会加上 serde rename 属性。

如何使用这个工具

  1. 粘贴一份有代表性的响应,其中应包含字段存在差异的记录。
  2. 检查生成的输出,必要时修改根名称。
  3. 复制或下载代码,然后对照你的 API 契约检查类型。

示例演示

以下输出来自内置转换器。两个数组元素的 price 值用于推断浮点型字段;note 值分别为 null 和字符串,因此推断为可空字段。

输入

{
  "user-id": 42,
  "profile": {
    "city": "London",
    "created_at": "2026-10-14T09:00:00Z"
  },
  "items": [
    {
      "price": 12,
      "note": null
    },
    {
      "price": 12.5,
      "note": "gift"
    }
  ]
}

输出

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    #[serde(rename = "user-id")]
    pub user_id: i64,
    pub profile: Profile,
    pub items: Vec<Item>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Profile {
    pub city: String,
    pub created_at: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Item {
    pub price: f64,
    pub note: Option<String>,
}

配合 serde_json 使用结构体

在 Cargo.toml 中为 serde 依赖启用 derive 特性,并添加 serde_json。把结构体复制到一个模块中,然后反序列化响应。

基于示例的推断不会设定应用的校验规则。把解码后的模型当作可信输入之前,请检查数值范围、必填字段和时间戳。

let model: Root = serde_json::from_str(&response_body)?;
let text = serde_json::to_string(&model)?;

选项与特殊情况

  • 数组变成 Vec,有类型的可空字段变成 Option。在部分记录中缺失的字段会加上 skip_serializing_if = "Option::is_none"。
  • 未知、只出现过 null 或类型混合的值使用 serde_json::Value。重命名会保留标点符号;Rust 保留字在可能时使用原始标识符(raw identifier)。
  • 整数使用 i64,超出有符号 64 位范围时使用 i128。小数使用 f64。接受非常大的整数之前,请检查 serde_json 的支持情况和数值范围。
  • 日期保持为 String。精确的十进制金额需要专门的领域类型和序列化器;JSON 示例无法提供这些规则。

默认保护隐私

你的文档只保留在这个浏览器中。Tool Kumar 在你的设备上解析、转换并生成下载文件,无需账号,也没有上传步骤。

JSON 转 Rust 结构体:常见问题

生成器会包含 serde 派生吗?
会。它导入 serde::{Deserialize, Serialize},并为结构体派生 Debug、Clone、Serialize 和 Deserialize。
会保留 JSON 名称吗?
会。它会在需要时生成 serde rename 属性;如果能减少逐字段映射,也可能使用 rename_all = "camelCase"。
null 和缺失的值如何表示?
有类型的可空或缺失字段使用 Option<T>。未知字段和只出现过 null 的字段使用 serde_json::Value,它本身也可以容纳 JSON null。
可以用 serde_json 反序列化结果吗?
可以。在 Rust 项目中添加启用了 derive 特性的 serde 和 serde_json,然后反序列化为生成的 Root 类型。

相关工具

JSON 转 Go 结构体、JSON 转 Java 实体类和JSON Schema 生成器。