Como decodificar o seguinte json usando o Swift 4?
{
"data": {
"id": 22,
"packageId": 5,
"Package": {
"id": 5,
"color": "blue"
}
},
"error": false,
"message": "Successfully Fetched"
}
Eu tentei usando o seguinte:
struct Root: Codable {
enum CodingKeys: String, CodingKey {
case id = "id"
case packageId = "packageId"
case package = "Package"
}
var package : Package
var id : Int
var packageId : Int
}
struct Package : Codable {
var id : Int
var color : String
}
Está me dando o seguinte erro:
keyNotFound (LocalNotificationsAlert.Root.CodingKeys.id, Swift.DecodingError.Context (codingPath: [], debugDescription: "Não valor associado à chave id ("id"). ", subjacenteError: nil))
Por favor me ajude a consertar isso, obrigado.
Respostas:
3 para resposta № 1o Raiz objeto não é o dicionário com id
, packageId
e package
chaves, o Root
objeto é o dicionário externo com chaves data
, error
, message
.
Então você precisa de 3 estruturas
struct Root: Codable {
let data : PackageData? // If `error` is true `data` might be missing
let error : Bool
let message : String
}
struct PackageData: Codable {
enum CodingKeys: String, CodingKey {
case package = "Package"
case id, packageId
}
let package : Package
let id : Int
let packageId : Int
}
struct Package : Codable {
let id : Int
let color : String
}
0 para resposta № 2
Se você não quiser decodificar a resposta personalizada, precisará fornecer a estrutura para toda a resposta do json.
struct Response: Decodable {
let data: Root
let error: Bool
let message: String
}