Swift 4:解析JSON到Codable结构体,添加JSON外的额外变量
解决Codable结构体添加非JSON字段的问题
这问题我之前也碰到过,其实处理起来很简单——核心就是让Codable协议在编码/解码过程中忽略这个不属于JSON的额外属性。你的代码里已经给favorite设了默认值false,不过为了更清晰可靠,推荐显式声明CodingKeys枚举来指定需要处理的JSON字段:
struct LoanUser: Codable { let name: String let use: String let location: Location let loan_amount: Int let image: Image var favorite: Bool = false // 只列出JSON中存在的字段,自动忽略favorite enum CodingKeys: String, CodingKey { case name, use, location, loan_amount, image } }
为什么要这么做?
- 显式的
CodingKeys会告诉Codable只处理枚举内的属性,favorite不在其中,所以解码时不会尝试从JSON读取它,编码时也不会把它写入输出。 - 虽然Swift 5.1+支持带默认值的属性自动被
Codable忽略,但显式声明CodingKeys的方式更直观,也能避免后续修改结构体时出现意外问题(比如新增属性时不小心影响Codable行为)。
如果你的Location和Image结构体也遵循Codable,那整个解码流程完全不受影响,favorite会一直保持默认的false,你也可以在后续逻辑里手动修改它的值。
内容的提问来源于stack exchange,提问作者Mads Stoltenborg
相关产品推荐
相关产品推荐

