【发布时间】:2018-11-10 06:02:54
【问题描述】:
我正在尝试解码嵌套的 JSON。问题是顶层和嵌套键的名称相似。喜欢:
{
success: bool
message: String
error: {
message: String
}
}
我会从后端收到一条成功消息或一条失败消息。如果成功为真,则不会返回错误键,如果为假,则将错误与消息一起发送。
所以如果成功的话:
{
success: true
message: "Success message"
}
如果失败:
{
success: false
error:{
message: "Failed message"
}
}
以上将是返回的json。这是我的解码结构:
struct loginResponse : Codable{
var success: Bool
var success_message: String
var error_message: String
enum loginResponseKeys: String, CodingKey{
case success
case error
case success_message = "message" // raw value is not unique
case error_message = "message"
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: loginResponseKeys.self)
let error = try container.nestedContainer(keyedBy: loginResponseKeys.self, forKey: .error)
error_message = try error.decode(String.self, forKey: .error_message)
let message = try container.decode(String.self, forKey:.success_message)
}
没错,它说原始值不是唯一的。但是我该如何克服呢?
【问题讨论】:
-
为错误创建另一个枚举。例如errorResponseKeys 包含一条消息。当你得到 nestedContainer 使用 errorResponseKeys.self 而不是 loginResponseKeys.self