logo
GeekFormat

JSON 转 Swift

免费在线 JSON 转 Swift 工具,把 API 响应、配置文件或日志 JSON 一键转成纯 Swift struct / class 类型声明。无注册、无上传,浏览器本地实时生成,适合 iOS、macOS、watchOS 与 tvOS 项目快速建模。

相关推荐

关于 JSON 转 Swift:把 JSON 数据变成 Apple 生态原生类型

JSON 转 Swift 是把 JSON 格式的数据(对象或数组)自动转换为 Swift struct / class 类型声明的过程。JSON 是 REST API、配置文件、埋点日志的事实标准,而 Swift 是 iOS、macOS、watchOS、tvOS 应用的主要开发语言,也是服务端框架如 Vapor 的核心语言。开发中经常需要把 API 返回的 JSON 写成对应的 Swift 类型,手写不仅耗时还容易遗漏可选字段,本工具的作用就是把这一过程自动化。

本工具使用 quicktype-core 在浏览器本地完成转换。quicktype 是一款支持多语言的结构生成器,本工具针对 Swift 启用 just-types 与 no-comments 选项,因此输出的是干净的 struct / class 属性声明,不包含 Codable、Decodable、Encodable 等序列化注解,也不包含 import 语句或文件头注释。这种「裸类型」方便开发者根据项目需要自由添加协议、调整访问控制,或改成 Alamofire / Moya 等网络框架偏好的命名约定。

Swift 的类型系统以安全著称。struct 是值类型,适合表示不可变数据;class 是引用类型,适合需要共享状态或继承的场景。本工具生成的属性会尽可能映射到 Swift 的 String、Int、Double、Bool、[T]、自定义类型等。开发者可以在生成后根据业务需求把某些字段改为 Optional(?)、给类型添加 Codable 协议,或者把整个 struct 升级为 class 以获得引用语义。

嵌套对象处理是工具的关键能力。当 JSON 包含嵌套对象时,工具会递归生成独立的子类型,例如 Root 包含 address 对象时会生成 Address 类型,主类型中通过 var address: Address 引用。这样避免了类型重复定义,也让 Xcode 的自动补全和类型检查能够正确追踪层级关系。命名规则采用字段名首字母大写,例如 users 数组中的元素会被命名为 User。

数组类型推断遵循「按首项元素推断」的策略。如果数组元素是字符串则生成 [String],是整数则生成 [Int],是浮点数则生成 [Double],是对象则生成 [自定义类型]。空数组 [] 由于缺乏样本,会生成 [Any] 或兜底类型,生成后建议根据实际业务改为具体类型。对于特别大的数组或稀疏数组,建议在源 JSON 中放入真实样本元素,提高推断准确度。

纯前端处理是本工具的核心架构优势。所有 JSON 解析与 Swift 代码生成都在浏览器 JavaScript(含 Web Worker 中的 quicktype-core)中执行,不依赖后端服务,也不向任何服务器发送数据。这种设计既保护了可能包含敏感信息的 JSON 数据,也保证了转换速度仅受本地设备性能限制,无需等待网络往返。对于处理含 API 密钥、未公开业务字段的 JSON 尤为重要。

本工具与一些强行绑定 Codable / CodingKeys / Date 解码策略的在线工具不同:快团队成员对协议、命名、访问控制往往有不同偏好,本工具坚持最小输出原则,把协议和策略选择留给开发者按项目需要再加工。这种「生成半成品 + 项目级二次加工」的工作流,在中大型团队中通常比「一键全包」更受工程师欢迎。

适用场景

  • iOS 开发:把后端 REST API 返回的 JSON 转成 Swift struct,用于 SwiftUI 或 UIKit 网络层建模与 JSONDecoder 解码
  • macOS 开发:把应用配置 JSON 转成 Swift 类型,在 AppKit 项目中做类型安全的配置读取,避免拼写错误
  • watchOS 开发:为 Apple Watch 应用把健康、运动数据 JSON 转成 Swift 模型并接入 SwiftUI 与 HealthKit
  • tvOS 开发:把内容推荐接口 JSON 转成 Swift 类型,用于电视应用首页数据展示与焦点导航
  • SwiftUI MVVM 建模:把 API 数据模型直接作为 @Published 属性绑定到 ViewModel,再驱动界面视图
  • Combine 响应式数据流:将 JSON 响应类型作为 Publisher 的输出类型,配合 JSONDecoder 做响应式解析
  • SwiftData / Core Data 前置建模:先生成 Swift struct,再手动添加 @Model 或 @NSManaged 注解进行实体映射
  • 第三方 SDK 对接:把 SDK 文档中的 JSON 响应示例转成 Swift 类型,快速接入登录、支付、推送、地图等 SDK
  • 单元测试准备:把接口 mock JSON 转成 Swift 类型后用于 XCTest 测试数据与断言,提升测试可维护性
  • 代码评审:把 API 返回 JSON 转成 Swift 类型,便于团队 Code Review 时讨论字段命名与可选性
  • Flutter / React Native 混合开发:为调用原生 Swift 模块准备数据模型,减少 bridge 层的类型转换错误
  • 后端接口迁移:从 REST 接口文档或 Postman 示例 JSON 生成 Swift 客户端模型,跨版本升级时快速同步
  • 教学培训:Swift / iOS 课程中演示 JSON 到类型系统的映射,帮助学生理解 API 数据建模与类型安全
  • 健康与健身应用:把 HealthKit / Fitbit 等接口返回的 JSON 转成 Swift 类型,用于 Apple Health 数据建模
  • 支付与金融应用:把支付网关的接口响应 JSON 转成 Swift 模型,便于对账和异常处理
  • 电商订单系统:把订单、商品、地址等 JSON 转成 Swift struct,配合 SwiftUI 列表与详情页展示
  • 新闻与内容应用:把内容管理系统的 JSON 响应转成 Swift 类型,用于 TableView / SwiftUI 列表 / 详情页
  • Vapor 服务端开发:把后端 API 的请求/响应 JSON 转成 Swift 结构体,用于服务端模型定义与 Codable 编解码
  • MapKit 与地理数据:把地图接口返回的 JSON 转成 Swift struct,用于地点检索、路线规划、地理编码结果建模

使用方法

  1. 在左侧编辑器粘贴 JSON 内容,或点击上传按钮选择 .json / .txt 文件,也可加载内置示例数据
  2. 工具会在 400ms 防抖后自动调用 quicktype-core 转换,右侧显示生成的 Swift struct / class 代码
  3. 如果 JSON 格式错误,点击「修复 JSON」按钮自动修复常见语法问题(尾随逗号、单引号、缺引号等)
  4. 检查生成结果,可根据项目需要手动添加 Codable / Equatable / Identifiable 等协议;点击「复制」粘贴到 Xcode,或点击「下载」保存为 .swift 文件

功能特点

  • 纯浏览器本地转换:JSON 解析与 Swift 代码生成全部在浏览器内通过 quicktype-core 完成,原始 JSON 和生成代码均不上传任何服务器
  • quicktype-core just-types 模式:输出为干净的 Swift struct / class 属性声明,无 import、无 Codable / CodingKeys 等注释,方便按项目需要再加工
  • 400ms 防抖自动转换:粘贴或修改 JSON 后几乎实时生成 Swift 类型,无需反复点击转换按钮,转换过程完全异步不阻塞 UI
  • Web Worker 后台执行:quicktype-core 在浏览器 Web Worker 中运行,避免大 JSON 转换时冻结主线程与编辑卡顿
  • 智能类型推断:自动映射 String、Int、Double、Bool、[T]、自定义类型,数组按首项类型推断,不需要手写字段类型
  • 嵌套对象自动展开:递归为每个嵌套对象生成独立的 Swift 类型,按字段名首字母大写命名,避免类型重复定义
  • 数组类型自动推断:JSON 数组自动转换为 [String] / [Int] / [Double] / [自定义类型],空数组默认生成 [Any]
  • 一键 JSON 错误修复:遇到尾随逗号、单引号、缺引号、注释等常见格式错误时,可一键自动修复并继续转换
  • 一键复制 + .swift 下载:把生成的 Swift 代码一键复制到剪贴板,或下载为 .swift 文件直接拖入 Xcode 项目
  • 示例数据 + 文件上传:内置 Swift 风格的示例 JSON(含嵌套 address / company / tags),支持拖拽或点击上传 .json / .txt 文件
  • localStorage 输入历史:自动保存最近输入,刷新或误关页面后可快速恢复继续编辑,不用担心内容丢失
  • 响应式分屏编辑器:左右分屏实时预览,桌面与移动端自适应,小屏也能顺畅操作

代码示例

Swift:URLSession + JSONDecoder 解析生成的 struct

swift

iOS / macOS 项目最常见的用法:把本工具生成的 struct 添加 Codable 后,用 URLSession 异步拉取并用 JSONDecoder 解码。

import Foundation

// 1) 本工具生成的根类型(补上 Codable 协议)
struct User: Codable {
    let id: Int
    let name: String
    let email: String
    let isActive: Bool
    let tags: [String]
}

// 2) URLSession 异步获取并解码
func fetchUser(id: Int) async throws -> User {
    let url = URL(string: "https://api.example.com/users/\(id)")!
    let (data, response) = try await URLSession.shared.data(from: url)
    guard
        let http = response as? HTTPURLResponse,
        (200..<300).contains(http.statusCode)
    else {
        throw URLError(.badServerResponse)
    }
    return try JSONDecoder().decode(User.self, from: data)
}

// 3) 使用示例(Swift 5.5+ async/await)
Task {
    do {
        let user = try await fetchUser(id: 42)
        print("User: \(user.name), tags: \(user.tags)")
    } catch {
        print("Failed to decode:", error)
    }
}

Swift:Alamofire responseDecodable 反序列化生成的类型

swift

使用 Alamofire 时,可以直接用 responseDecodable 把本工具生成的 struct 自动解码为 Swift 对象。

import Foundation
import Alamofire

// 本工具生成的类型,添加 Codable 后直接可用
struct Product: Codable {
    let id: Int
    let title: String
    let price: Double
    let inStock: Bool
    let images: [String]
}

final class ProductService {
    private let session: Session

    init(session: Session = .default) {
        self.session = session
    }

    /// Alamofire 5 async/await 风格的 responseDecodable
    func loadProduct(id: Int) async throws -> Product {
        let url = "https://api.example.com/products/\(id)"
        return try await withCheckedThrowingContinuation { continuation in
            session.request(url)
                .validate(statusCode: 200..<300)
                .responseDecodable(of: Product.self) { response in
                    switch response.result {
                    case .success(let product):
                        continuation.resume(returning: product)
                    case .failure(let error):
                        continuation.resume(throwing: error)
                    }
                }
        }
    }
}

// Moya 风格调用示例
// provider.request(.product(id: 1)).map(Product.self)
// let product: Product = try await provider.request(.product(id: 1)).map(Product.self)

Swift:Combine + JSONDecoder 做响应式解析

swift

在 SwiftUI / Combine 项目里,可以把生成的 struct 与 dataTaskPublisher / decode 一起用,做响应式数据流。

import Foundation
import Combine

// 本工具生成的根类型
struct Article: Codable, Identifiable {
    let id: Int
    let title: String
    let body: String
    let publishedAt: Date
}

final class ArticleRepository {
    private let session: URLSession
    private var cancellables = Set<AnyCancellable>()

    init(session: URLSession = .shared) {
        self.session = session
    }

    /// 用 Combine 暴露数据流
    func articlePublisher(id: Int) -> AnyPublisher<Article, Error> {
        let url = URL(string: "https://api.example.com/articles/\(id)")!
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .iso8601

        return session.dataTaskPublisher(for: url)
            .map(\.data)
            .decode(type: Article.self, decoder: decoder)
            .receive(on: DispatchQueue.main)
            .eraseToAnyPublisher()
    }

    /// 在 SwiftUI ViewModel 中订阅
    func bind(to viewModel: ArticleViewModel, articleId: Int) {
        articlePublisher(id: articleId)
            .sink(
                receiveCompletion: { completion in
                    if case .failure(let err) = completion {
                        viewModel.errorMessage = err.localizedDescription
                    }
                },
                receiveValue: { article in
                    viewModel.article = article
                }
            )
            .store(in: &cancellables)
    }
}

final class ArticleViewModel: ObservableObject {
    @Published var article: Article?
    @Published var errorMessage: String?
}

最佳实践

常见问题

怎么把 JSON 转成 Swift 结构体?

将 JSON 内容粘贴到左侧输入框,工具会在 400ms 防抖后自动调用 quicktype-core 转换为 Swift 代码,并在右侧面板实时显示结果。也可以点击上传按钮选择 .json / .txt 文件,或点击示例按钮加载内置数据。转换完成后可一键复制或下载为 .swift 文件。

生成的 Swift 代码包含 Codable 吗?

默认不包含。本工具使用 quicktype-core 的 just-types 模式,输出的是纯 struct / class 属性声明,没有 Codable、Decodable 或 Encodable 注解,也不带 import 语句。如果你需要 Codable,只需要在生成后手动添加 : Codable(如 struct User: Codable {}),或自行编写 JSONDecoder 解析逻辑。

支持哪些 JSON 数据结构?

支持所有合法 JSON:基本类型(null、boolean、number、string)、一维或多维数组、任意深度的嵌套对象。根输入可以是 JSON 对象或 JSON 数组,工具会以对象优先、数组按首项推断的方式处理。不支持的输入包括 JavaScript 特殊值(函数、Symbol、undefined)以及非 JSON 文本。

嵌套的 JSON 对象会怎么处理?

工具会递归为每个嵌套对象生成独立的 Swift 类型。命名规则基于父类型名与字段名组合,如 Root 包含 address 字段时会生成 Address 子类型,主类型中通过 var address: Address 引用。这样避免了类型重复定义,也让 Xcode 的自动补全和类型检查能正确追踪层级关系。

数组字段会转成 Swift 数组吗?

会。JSON 数组会自动转换为 Swift [T] 形式。如果数组元素是字符串则生成 [String],是整数则生成 [Int],是浮点数则生成 [Double],是对象则生成 [自定义类型]。空数组 [] 由于没有样本元素,默认生成 [Any],建议生成后手动改为 [String] 或 [Int] 等具体类型。

null 值字段会生成什么类型?

JSON 中的 null 值无法推断具体类型,工具可能生成 Any 或兜底类型。建议把源 JSON 中值为 null 的字段替换为示例值(如 "field": "" 推断为 String)或根据业务手动改为 Optional(如 var phone: String?),这样更符合 Swift 类型系统的安全语义。

可以自定义生成的结构体名称吗?

可以。在工具栏点击类型名称按钮(或设置入口),即可修改根类型名称(默认如 Root 或根据示例数据推断)。子类型命名会基于根名称和字段名自动生成,命名规则是字段名首字母大写,例如 users → User、tags → Tag。

JSON 格式错误怎么办?

工具会自动检测 JSON 合法性,错误时会在右侧显示具体错误提示,并提供「修复 JSON」按钮。点击后可自动修复常见错误:末尾多余逗号、单引号替换为双引号、缺失引号的 key 补全、注释移除等。修复成功后即可继续转换,无需手工改 JSON。

数据会上传到服务器吗?隐私安全吗?

完全本地浏览器运行。所有 JSON 解析、Swift 代码生成都通过浏览器 JavaScript(含 Web Worker 中的 quicktype-core)在本地完成,输入的 JSON 数据和生成的 Swift 代码不会被上传到任何服务器,也不会被记录或缓存到云端。包含 API key、token、用户隐私字段、未上线业务结构等敏感 JSON 都可以放心使用,关闭页面即清除。

生成的代码能直接用于 Xcode 项目吗?

可以。生成的代码是标准 Swift 语法,可直接复制到 Xcode 的 .swift 文件中,或通过「下载」按钮保存为 .swift 文件拖入项目。由于输出为纯类型声明,建议根据项目需要手动添加 Codable、Equatable、Identifiable 等协议,或者调整访问控制修饰符(public / internal / private)。

支持 JSON 数组作为根输入吗?

支持。当根输入是 JSON 数组时,工具会以数组第一个元素为模板生成元素类型,并输出该元素类型定义。例如 [{"id":1,"name":"A"}] 会生成名为 Item 的 struct(或基于字段推断的名字),其字段就是第一个元素的字段;主类型通过 property items: [Item] 引用,避免直接把数组当根类型。

转换大 JSON 会卡吗?

工具没有显式大小限制,但浏览器对超大 JSON 的解析与渲染会变慢。建议:① 一次只转换一个业务模块的 JSON;② 嵌套层级过深时拆分层级处理;③ 超过数 MB 的 JSON 可使用命令行版的 quicktype 处理;④ 把同一个 JSON 拆分成多个子模块分别转换可显著降低内存占用。

可以和 JSON 转 TypeScript 互相替代吗?

两者都是把 JSON 转为对应语言的类型定义,但侧重点不同:JSON 转 Swift 生成 struct / class 属性声明,用于 iOS / macOS 原生应用;JSON 转 TypeScript 生成 interface / type 声明,用于前端类型检查。如果你的项目同时有 iOS 客户端和 Web 前端,建议对同一份 JSON 分别生成 Swift 与 TS 两个版本,保证两端类型一致。

如何在生成的代码中加入 Codable 协议?

本工具默认输出纯类型,不直接带协议。生成后你只需要在 struct/class 声明后追加 : Codable,例如 struct User: Codable {},即可让 JSONDecoder 使用。如果你希望默认带 Codable,可以 fork quicktype-core 并修改其 Swift 渲染器,或在生成后用 Xcode 的批量替换功能给所有类型加上协议。

需要联网吗?移动端能用吗?

首次访问页面时需要联网拉取工具脚本和 quicktype-core 资源,之后可在浏览器缓存中离线运行(在已访问过的浏览器中)。移动端浏览器(iOS Safari、Android Chrome)也能正常使用,界面为响应式分屏设计,竖屏时会自动切换为上下堆叠。

生成后是否支持单独修改某个类型而不破坏其它类型?

支持。生成后每个 Swift 类型都是独立 struct / class,工具的输出是纯文本,你可以单独复制某一个类型粘贴到 Xcode,或在 Xcode 中用 Rename 重构批量修改类型与字段而不影响其它类型。如果需要重新生成整组类型,刷新页面后再次粘贴 JSON 即可。

支持 Swift enum 推断吗?

quicktype 对 union/枚举的支持需要额外的 type hints 或 GraphQL/JSON Schema 输入。仅基于 JSON 样本难以推断枚举,因此本工具默认不会生成 enum。如果你需要枚举,可以手动把对应 struct 改为 enum + Codable,或改用 JSON 转 Kotlin / TypeScript 工具先得到 enum 类型,再手动迁移到 Swift。

故障排查

提示「请输入 JSON 数据」或右侧为空

左侧输入框为空或只有空白字符。请粘贴有效的 JSON 内容,或点击「示例」加载样例,或点击「上传」选择 .json / .txt 文件。

提示「Unexpected token ... in JSON」

JSON 格式不合法。常见原因:① 末尾有多余逗号(如 {"a":1,});② 用了单引号而非双引号;③ JS 对象写法(如 {key: value})而非 JSON(如 {"key": "value"});④ 含 JavaScript 注释。点击「修复 JSON」按钮可自动修复部分常见错误。

生成的类型没有 Codable,无法直接用 JSONDecoder

这是预期行为。本工具使用 just-types 模式,输出纯 struct / class 属性声明。如需 Codable,请在生成后给类型添加 : Codable(如 struct User: Codable {}),或写 extension User: Codable {} 后再调用 JSONDecoder。

空数组 [] 生成了 [Any]

空数组没有样本元素,工具会生成兜底类型 [Any]。建议在源 JSON 中至少放入一个示例元素(如 [1, 2]),生成后再删除示例值,并手动指定具体类型;或在生成后直接改为 [String] / [User] 等更精确的类型。

null 值字段类型不确定

JSON null 无法推断具体类型,工具可能生成 Any 或兜底类型。建议把源 JSON 中的 null 替换为代表性示例值(如 "" 或 0),生成后再把该字段改为 Optional(?)或具体类型,例如 var phone: String?。

生成的类型名不符合项目规范

可在工具栏修改根类型名称,子类型名会基于根名称 + 字段名自动生成。如果仍不满意,生成后在 Xcode 中使用 Rename 重构批量修改(右键 → Refactor → Rename),Xcode 会同步更新所有引用。

大 JSON 转换后页面卡顿

浏览器渲染超大 JSON 和生成大量类型时会变慢。建议把 JSON 拆分成多个独立业务模块分别转换,或仅提取需要建模的关键对象进行转换;超过 10MB 的 JSON 推荐使用命令行版的 quicktype 处理。

Xcode 编译报错「Type 'X' does not conform to protocol 'Decodable'」

说明你给某些字段加 Codable 后,没有正确处理 Optional / Date / Enum 等类型。常见修复:① 把所有可能为 null 的字段改为 Optional<T>;② 自定义日期策略 JSONDecoder().dateDecodingStrategy = .iso8601;③ 自定义 CodingKeys 让 JSON key 与 Swift 属性名一致。

字段名是 snake_case,Swift 习惯是 camelCase

本工具默认保留 JSON 原字段名,因此 snake_case 字段会原样生成。若想统一为 camelCase,可在生成后用 Xcode Rename 批量重命名,或在自定义 quicktype 渲染器中将字段名转换为 camelCase,再补充 CodingKeys 映射,保证 JSON 解码正确。

下载的 .swift 文件用 Xcode 打开后中文 key 报错

Swift 推荐字段名为英文 ASCII 标识符。若源 JSON 含中文 key(如 {"姓名": "Alice"}),生成的 var 姓名: String 会让 Swift 编译器对部分历史版本报错。建议在源 JSON 中把 key 改为英文(如 name),更符合 Swift 编码规范。

类型只有 var,没有 let / private 控制

本工具默认生成 var public 属性,方便生成后再加工。如需 let 或访问控制(如 private(set)),可在 Xcode 中使用 Refactor → Add Access Control 批量修改,或在生成后用 sed / 文本编辑工具替换 var 为 let。

JSON 含 ISO 8601 日期字符串,生成 Date 字段解码失败

本工具默认把 ISO 8601 字符串映射为 String,Swift 不会自动转换为 Date。需要在 JSONDecoder 中设置 dateDecodingStrategy,例如 JSONDecoder().dateDecodingStrategy = .iso8601。如果日期格式非标准,还需手动实现 DateFormatter 或自定义解析逻辑。

嵌套层级太深,名字冲突

工具以「字段名首字母大写」为子类型命名。深嵌套 JSON 中可能出现同名嵌套对象导致类型冲突。解决方法:① 在源 JSON 中给字段加上业务前缀;② 把根 JSON 拆分为多个独立模块分别生成;③ 生成后用 Xcode Rename 批量修改冲突的类型名。

生成的是 public struct 但项目用 module 隔离

本工具默认生成 internal struct,没有显式 public 修饰符。如果项目按 module 拆分且需要跨模块访问,需要在 Xcode 中批量替换 struct 为 public struct,或在生成后用 sed/awk 脚本统一加 public 关键字。

术语表

struct
Swift 中的值类型。默认适合表示不可变数据模型,赋值时会被复制。本工具默认生成 struct 用于表示 JSON 对象。
class
Swift 中的引用类型。适合需要共享状态、继承或身份标识(===)的场景。本工具在某些配置下可生成 class。
Optional(?)
Swift 中表示值可能为 nil 的类型修饰符,如 var name: String?。本工具生成的字段默认非 Optional,生成后可根据 JSON 字段是否可缺失手动添加 ?。
Array([T])
Swift 中的数组类型简写。本工具把 JSON 数组转换为 [T],T 按数组元素类型推断,如 [String]、[Int] 或 [自定义类型]。
Codable
Swift 中 Decodable 与 Encodable 的协议组合。实现 Codable 后可用 JSONDecoder 把 JSON 数据解析为类型实例。本工具默认不生成 Codable,需手动添加。
JSONDecoder
Foundation 框架中的 JSON 解析器。配合 Codable 协议使用,可把 Data 转换为 Swift 类型实例。本工具输出纯类型后,开发者可自行用 JSONDecoder 解析。
URLSession
Apple 平台 Foundation 框架中的网络请求 API。常见用法是 URLSession.shared.data(from: url),与 JSONDecoder 配合完成接口联调。
Alamofire
Swift 社区最流行的第三方 HTTP 网络库。基于 URLSession 封装,支持 responseDecodable 直接反序列化为 Swift 类型。
Moya
Swift 网络抽象层,通常与 Alamofire 搭配。Moya 配合 Codable 类型可大幅简化 API 调用样板代码。
Vapor
Swift 主流的服务端框架,使用 Swift 在 macOS / Linux 上构建 Web 应用。本工具生成的 Swift 结构体同样可以用于 Vapor 的路由模型。
quicktype
支持多语言的类型生成器开源工具,本工具通过 quicktype-core 在浏览器 Web Worker 中完成 JSON 到 Swift 的转换。
Property
Swift 类型中的属性声明。本工具把 JSON 的每个 key 映射为一个 Swift property,例如 "name": "Alice" 映射为 var name: String。
Type Inference
根据 JSON 值的字面量形式自动推断 Swift 类型的过程。本工具依据 null、boolean、number、string、array、object 做映射。
localStorage
浏览器本地键值存储。本工具用 localStorage 保存最近输入历史,刷新或误关页面后可恢复。
Web Worker
浏览器提供的后台线程机制。本工具通过 Web Worker 加载和执行 quicktype-core,避免大 JSON 转换阻塞主线程。
SwiftUI
Apple 推出的声明式 UI 框架。本工具生成的 Swift 类型可作为 SwiftUI 视图的数据模型,配合 @State / @ObservedObject 驱动界面。
Combine
Apple 的响应式编程框架。生成的 Swift 类型结合 JSONDecoder 可构建 dataTaskPublisher 响应式数据流。
SwiftData
Apple 2023 年推出的数据持久化框架。本工具生成的类型可作为 SwiftData 模型基类,添加 @Model 后即可被 SwiftData 管理。
Value Type / Reference Type
Swift 中 struct 是值类型,class 是引用类型。本工具默认生成 struct,赋值时被复制;如需引用语义可手动改为 class。
Field Naming
本工具默认保留 JSON 原字段名。若源 JSON 为 snake_case 而项目要求 camelCase,需要手动 rename 或自定义 quicktype 渲染器。
ISO 8601 日期
常见 JSON 日期格式,如 2026-07-14T10:00:00Z。需要配套 JSONDecoder.dateDecodingStrategy = .iso8601 才能正确解析到 Date 类型。

JSON 类型到 Swift 类型映射速查表

工具根据 JSON 值的形式自动推断对应的 Swift 类型:

JSON 值示例判断方法生成 Swift 类型说明
nullvalue === nullAny? 或具体 Optional无法推断具体类型,生成后建议手动改为 Optional<T>
true / falsetypeof value === 'boolean'Bool直接映射为 Swift 布尔类型
42typeof value === 'number' && Number.isInteger(value)Int整数映射为 Int(32/64 位由平台决定)
3.14typeof value === 'number' && !Number.isInteger(value)Double浮点数映射为 Double
"hello"typeof value === 'string'String字符串映射为 String
[] (空数组)Array.isArray(value) && value.length === 0[Any]无法推断元素类型,建议补充示例或手动修改为具体类型
["a", "b"]Array.isArray(value) && typeof value[0] === 'string'[String]字符串数组
[1, 2, 3]Array.isArray(value) && typeof value[0] === 'number'[Int]整数数组
[1.5, 2.5]Array.isArray(value) && typeof value[0] === 'number' && !Number.isInteger(value[0])[Double]浮点数组
[{...}, {...}]Array.isArray(value) && typeof value[0] === 'object'[Item]对象数组,元素为自定义类型,命名按字段名推断
{...} (嵌套对象)typeof value === 'object' && !Array.isArray(value)独立 struct / class递归生成独立类型,命名按字段名首字母大写

JSON 转 Swift 在 Apple 生态中的常见使用场景

生成的 Swift 类型可以直接用于 Apple 平台 / 第三方框架的不同场景:

使用场景常用框架需要补充的协议 / 处理典型代码片段
REST API 解析URLSession + JSONDecoder为类型加 Codable,保持 struct 值语义try JSONDecoder().decode(User.self, from: data)
简化 HTTP 请求Alamofire为类型加 Codable,配合 responseDecodablesession.request(url).responseDecodable(of: User.self)
抽象网络层Moya为类型加 Codable,Moya 自动反序列化provider.request(.user(id: 1)).map(User.self)
响应式数据流Combine + JSONDecoder为类型加 Codable,结合 dataTaskPublisherURLSession.shared.dataTaskPublisher(for: url).decode(type: User.self, decoder: decoder)
SwiftUI 列表展示SwiftUI List + Identifiable为类型加 Identifiable,让 List 自动 forEachList(items) { Text($0.name) }
服务端模型定义Vapor为类型加 Codable,Vapor 自动 Content 序列化struct User: Codable, Content { var id: Int; var name: String }
本地持久化模型SwiftData / Core Data在生成 struct / class 上加 @Model / @NSManaged@Model class User { var id: Int; var name: String }
跨端类型共享JSON 转 Swift + JSON 转 TypeScript 配合保持 Swift 与 TS 字段名一致,TS 端配合 TS 类型Swift: var name: String / TS: name: string

Privacy & Security

本 JSON 转 Swift 工具所有 JSON 解析、Swift 类型生成操作完全在你的浏览器本地通过 JavaScript(quicktype-core / Web Worker)完成,输入的 JSON 数据和生成的 Swift 代码都不会被上传到任何服务器,也不会被记录、缓存或存储到云端。包含内部接口字段、API key、token、用户隐私数据、未公开业务结构的敏感 JSON 都可以放心使用,关闭或刷新页面后所有输入和输出内容自动从内存清除,不依赖任何第三方网络服务。

Authoritative References