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
相关产品推荐
相关产品推荐

