/ / Como decodificar JSON no Swift 4? - json, rápido, codificável

Como decodificar o JSON no Swift 4? - json, rápido, codificável

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 № 1

o 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
}