You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift JSON解码:如何修改代码处理CourseCode等字段?

Swift JSON解码新增字段的修改方案

嘿,我来帮你搞定这个Swift JSON解码的字段新增问题!其实操作起来很直观,分这几步就行:

1. 先更新你的数据模型

首先找到你原来用于解码的Codable结构体(或者类),把需要新增的四个字段加进去就行。这里要注意字段类型要和JSON里的对应,如果不确定这些字段会不会在JSON里缺失,建议把它们设为可选类型(加?),这样解码时即使JSON没有这些字段也不会崩溃。

举个例子,假设你原来的模型是这样:

struct LearningItem: Codable {
    // 原来已有的字段
    let id: Int
    let content: String
}

修改后就变成:

struct LearningItem: Codable {
    // 原来已有的字段
    let id: Int
    let content: String
    
    // 新增的四个字段
    let courseCode: String?
    let chapterNumber: Int?
    let courseName: String?
    let unitName: String?
}

2. 处理JSON键名和Swift命名的映射(如果需要)

如果你的JSON里的字段名是下划线格式(比如course_code),而Swift用的是驼峰命名(courseCode),有两种方式解决:

方式一:自动驼峰转换(推荐)

在创建JSONDecoder的时候开启自动转换策略,这样不用手动写映射,非常省心:

let decoder = JSONDecoder()
// 开启下划线转驼峰的自动转换
decoder.keyDecodingStrategy = .convertFromSnakeCase

// 然后正常解码就行
do {
    let items = try decoder.decode([LearningItem].self, from: yourJsonData)
    // 处理解码后的数据
} catch {
    print("解码出错:\(error.localizedDescription)")
}

方式二:手动指定CodingKeys

如果JSON的键名和Swift命名差异很大,或者你需要自定义映射,就用CodingKeys枚举:

struct LearningItem: Codable {
    let id: Int
    let content: String
    let courseCode: String?
    let chapterNumber: Int?
    let courseName: String?
    let unitName: String?
    
    // 手动映射JSON键和Swift属性
    enum CodingKeys: String, CodingKey {
        case id, content
        case courseCode = "course_code"
        case chapterNumber = "chapter_number"
        case courseName = "course_name"
        case unitName = "unit_name"
    }
}

3. 验证解码逻辑

最后记得测试一下,构造包含新字段的JSON数据,看看解码是否正常。比如:

let testJsonData = """
{
    "id": 101,
    "content": "Swift解码入门",
    "course_code": "SWIFT002",
    "chapter_number": 3,
    "course_name": "iOS进阶",
    "unit_name": "Codable协议"
}
""".data(using: .utf8)!

do {
    let item = try decoder.decode(LearningItem.self, from: testJsonData)
    print("课程代码:\(item.courseCode ?? "无")")
    print("章节号:\(item.chapterNumber ?? 0)")
} catch {
    print("测试解码失败:\(error)")
}

这样修改后,你的解码流程就能正常处理新增的四个字段啦!

内容的提问来源于stack exchange,提问作者Mayday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:00:44