Swift: как анализировать и декодировать JSON, содержащий массив словарей - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь проанализировать JSON на определенной конечной точке API, используя протокол Codable в Swift. Как правильно декодировать это?

До сих пор я создал структуру Model для представления Post объектов, расположенных в конечной точке.Я также использую JSONDecoder () для декодирования массива объектов Post.Я попытался реструктурировать мою модель, чтобы иметь вложенные структуры, но это не работает.

Вот пример JSON:

[
  {
    "ID": 1,
    "title": "Title 1",
    "content": "Content 1"
    ...
  },
  {
    "ID": 2,
    "title": "Title 2",
    "content": "Content 2"
    ...
  }
]

Вот модель:

struct Post: Codable {
    let id: Int
    let title, content: String

    enum CodingKeys: String, CodingKey {
        case id = "ID"
        case title, content
    }
}

Вот пример кода извлечения:

let task = URLSession.shared.dataTask(with: url) {
            data, _, error in

            if let error = error {
                print("Error: Failed to fetch data from url. [\(error.localizedDescription)]")
                completion(.failure(error))
                return
            }

            guard let data = data else {
                print("Data not available.")
                return
            }

            do {
                let decoder = JSONDecoder()
                let posts = try decoder.decode([Post].self, from: data)
                print("POSTS: : ", posts)
                // ^ THIS IS NOT WORKING. I've tried Post.self too.

            } catch let jsonError {
                //error
            }
        }

        task.resume()

Вот ошибка, которую я получаю: ERROR: keyNotFound(CodingKeys(stringValue: "ID", intValue: nil), Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: \"ID\", intValue: nil) (\"ID\").", underlyingError: nil))

1 Ответ

0 голосов
/ 13 апреля 2019

Ваш код просто в порядке.Вам просто нужно проверить данные JSON.Эта ошибка отображается в случае:

  • Когда определенный ключ в Coding keys не совпадает с ключом данных json.В вашем случае это явно = "ID"

    Чтобы решить этот ответ проверки в postMan и сделать ключи точно такими же в Codingkeys

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...