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,我们可以帮助您解决此问题。