Ios Swift Codable:如果API将来可能会向响应JSON添加更多属性,则包括枚举编码键

Ios Swift Codable:如果API将来可能会向响应JSON添加更多属性,则包括枚举编码键,ios,json,swift,xcode,codable,Ios,Json,Swift,Xcode,Codable,我正在使用Codable解析我的JSON响应对象 包含enumcodingkeys:String,CodingKey是否是一个好主意,这样将来如果JSON响应对象添加了额外的属性,它们将被忽略而不会导致崩溃 当你在应用程序中有30个不同的模型时,需要回填的代码太多了 不确定是否有更好的方法来处理这个问题 答案是No。Codable只解码在json中找到的值。此外,如果将enumcodingkeys:String、CodingKey添加到每个Codable协议中,则没有必要这样做。您可以将其保留为

我正在使用
Codable
解析我的
JSON
响应对象

包含
enumcodingkeys:String,CodingKey
是否是一个好主意,这样将来如果
JSON
响应对象添加了额外的属性,它们将被忽略而不会导致崩溃

当你在应用程序中有30个不同的模型时,需要回填的代码太多了


不确定是否有更好的方法来处理这个问题

答案是
No
Codable
只解码在
json
中找到的值。此外,如果将
enumcodingkeys:String、CodingKey
添加到每个
Codable
协议中,则没有必要这样做。您可以将其保留为空值

如果密钥没有被蛇形破坏,我们使用编写
enumcodingkeys:String,CodingKey
。但是Codable有自己的
keyDecodingStrategy


let jsonString = """
[
    {
        "profile_name": "Ankur Lahiry",
    },
    {
        "profile_name": "Karim Rahman",
    }
]
"""

let jsonData = Data(jsonString.utf8)


struct Name : Codable {
    var profileName: String?
}


let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase // will solve enum CodingKeys: String, CodingKey issue 
do {
    let names = try decoder.decode([Name].self, from: jsonData)
    print(names)
} catch {
    print("error")
}


下面是一个运行良好的示例,它证明了未在结构中定义的额外json键将被忽略

let data = """
 { "id": 32, "name" : "abc", "other": "gbdfb"}
""".data(using: .utf8)!

struct JSONData: Decodable {
    let id: Int
    let name: String
}


do {
    let result = try JSONDecoder().decode(JSONData.self, from: data)
    print(result)
} catch {
    print(error)
}

这个问题没有意义,如果json键不是您的结构的一部分,它将不会被解码。如果它有额外的键与行不匹配,我相信它会崩溃。@user1107173这是不正确的。他们只会被忽略。如果您看到意外的JSON键导致崩溃,请发布您的示例JSON和struct,我们可以帮助您解决此问题。