Как получить JSON значение массива в Swift, используя Codable - PullRequest
0 голосов
/ 29 января 2020

У меня проблемы с получением значений направлений из следующих JSON:

"routeOptions": [
        {
          "name": "Jubilee",
          "directions": [
            "Wembley Park Underground Station",
            "Stanmore Underground Station"
          ],
          "lineIdentifier": {
            "id": "jubilee",
            "name": "Jubilee",
            "uri": "/Line/jubilee",
            "type": "Line",
            "routeType": "Unknown",
            "status": "Unknown"
          }
        }
      ]

Я считаю, что направления - это массив JSON, который в данный момент я использую Codable, как показано ниже , Мне удалось получить имя routeOptions, но я не могу понять, как получить направления, так как нет специальной переменной c key. Пожалуйста, кто-нибудь может помочь?

struct RouteOptions: Codable {

let name: String?
let directions: [Directions]?

init(name: String, directions: [Directions]) {
    self.name = name
    self.directions = directions
}}

struct Directions: Codable {}

1 Ответ

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

Вам нужно обрабатывать направления как массив строк

struct RouteOptions: Codable {
    let name: String
    let directions: [String]
}

Вот пример, где я исправил json, чтобы он был правильным

let data = """
{ "routeOptions": [
  {
    "name": "Jubilee",
    "directions": [
      "Wembley Park Underground Station",
      "Stanmore Underground Station"
    ],
    "lineIdentifier": {
      "id": "jubilee",
      "name": "Jubilee",
      "uri": "/Line/jubilee",
      "type": "Line",
      "routeType": "Unknown",
      "status": "Unknown"
    }
  }
]}
""".data(using: .utf8)!

struct Root: Decodable {
    let routeOptions: [RouteOptions]
}

struct RouteOptions: Codable {
    let name: String
    let directions: [String]
}

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