SWIFT: декодировать JSON объект в структуру - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь разобрать json данные в декодируемую структуру. Я запутался, потому что я не знаю, как отобразить массив объектов без ключа для каждого массива. json У меня есть:

{
    "table": [
        {
            "name": "Liverpool",
            "win": 22,
            "draw": 1,
            "loss": 0,
            "total": 67
        },
        {
            "name": "Man City",
            "win": 16,
            "draw": 3,
            "loss": 5,
            "total": 51
        }
    ]
}

Вот моя текущая структура:

struct Table: Decodable {
    let name: String
    let win: Int
    let draw: Int
    let loss: Int
    let total: Int
}

Я просто пытаюсь сделать что-то вроде:

    let tables = try! JSONDecoder().decode([Table].self, from: jsonData)

Я получаю ошибку:

Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.keyNotFound(CodingKeys(stringValue: "name", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"name\", intValue: nil) (\"name\").", underlyingError: nil))

1 Ответ

3 голосов
/ 29 января 2020

Вы игнорируете объект root, словарь с ключом table

struct Root: Decodable {
   let tables : [Table]

   enum CodingKeys : String, CodingKey { case tables = "table" }
}

struct Table: Decodable {
    let name: String
    let win: Int
    let draw: Int
    let loss: Int
    let total: Int
}

do {
    let result = try JSONDecoder().decode(Root.self, from: jsonData)
    let tables = result.tables
} catch { print(error) }
...