Я пытаюсь декодировать вложенный JSON.Проблема в том, что имена верхнего уровня и вложенных ключей похожи.Как:
{
success: bool
message: String
error: {
message: String
}
}
С серверной части я получаю сообщение об успехе или сообщение об ошибке.Если успех равен true, ключ ошибки не будет возвращен обратно, а если он равен false, то сообщение об ошибке вместе с сообщением отправляется.
, поэтому, если он успешен:
{
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)
}
Правильно, это говорит о том, что необработанное значение не является уникальным.Но как мне преодолеть это?