Как декодировать JSON, начинающийся с "[", используя swift Codable Protocol - PullRequest
1 голос
/ 28 сентября 2019

Я столкнулся с ответом JSON от сервера и должен его обработать.

По сути, корневой уровень JSON - это массив, а не словарь.Например:

[
  {
    "name": "Joe",
    "age": 50
  },
]

У меня есть структура, соответствующая Codable:

struct response: Codable {
    let responseArray: [Person]
}

struct person: Codable {
    let name: String
    let age: Int

    enum CodingKeys: String, CodingKey {
        case name = "name"
        case age = "age"
    }
}

При попытке декодировать я получаю следующую ошибку:

▿ DecodingError
  ▿ typeMismatch : 2 elements
    - .0 : Swift.Dictionary<Swift.String, Any>
    ▿ .1 : Context
      - codingPath : 0 elements
      - debugDescription : "Expected to decode Dictionary<String, Any> but found an array instead."
      - underlyingError : nil

Есть ли способ обработки массива с использованием ключей кодирования, если он не назван?

Если нет, как можно справиться с этой ситуацией?

1 Ответ

1 голос
/ 28 сентября 2019

Корень json - это массив, для которого деокд должен быть [Person].self Вы можете попробовать

struct Person: Codable {
    let name: String
    let age: Int  
}
let res = try? JSONDecoder().deocde([Person].self,from:data)
print(res)
...