Tool Kumar 工具

JSON 转 Swift 模型

生成遵循 Codable 的 Swift 结构体。当属性名与 JSON 键名不同时,转换器会添加 CodingKeys,所以像 user-id 这样的键仍能解码到 userId。

如何使用这个工具

  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"
    }
  ]
}

输出

import Foundation

struct Root: Codable {
    let userId: Int
    let profile: Profile
    let items: [Item]

    enum CodingKeys: String, CodingKey {
        case userId = "user-id"
        case profile, items
    }
}

struct Profile: Codable {
    let city: String
    let createdAt: String

    enum CodingKeys: String, CodingKey {
        case city
        case createdAt = "created_at"
    }
}

struct Item: Codable {
    let price: Double
    let note: String?
}

用 JSONDecoder 解码

用 JSONDecoder 配合生成的 Root 结构体进行解码。借助 Codable,同一个模型也可以用 JSONEncoder 编码。

这份输出请保持默认的键解码策略。它的 CodingKeys 已经包含传输时的原始键名,包括 created_at。

let model = try JSONDecoder().decode(Root.self, from: responseData)
let encoded = try JSONEncoder().encode(model)

选项与特殊情况

  • 整数推断为 Int,小数推断为 Double,超出有符号 64 位范围的整数推断为 Decimal。请检查目标平台的限制和小数精度。
  • null 或缺失的字段会变成可选属性。只出现过 null 或类型混合的结构,会在需要时使用生成的 JSONValue 辅助类型。
  • JSONValue 用 Double 存储数字,因此精确的金额或非常大的 ID 请使用明确的类型。
  • 日期字符串保持为 String。如果把字段改为 Date,请按 API 的日期格式配置 JSONDecoder.dateDecodingStrategy。

默认保护隐私

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

JSON 转 Swift 模型:常见问题

生成的是类还是结构体?
遵循 Codable 的结构体,使用 let 属性和嵌套的模型类型,并导入 Foundation。
什么时候会添加 CodingKeys?
当属性名发生变化时,会生成一个 CodingKeys 枚举,把 Swift 标识符映射回原始 JSON 键名。
如何处理 null?
示例中为 null 或在部分记录中缺失的字段会生成可选属性。未知或类型混合的值使用一个遵循 Codable 的 JSONValue 枚举,只在被引用时才会添加。
可以直接用 JSONDecoder 吗?
可以。把生成的结构体复制到项目中,从 Data 解码 Root.self 即可。请先检查可选字段和日期类型。

相关工具

JSON 转 Dart、JSON 转 Kotlin 数据类和JSON Schema 生成器。