Ошибка при разборе данных JSON (Swift 4 Playground) - PullRequest
0 голосов
/ 18 мая 2018

My Swift Playground продолжает возвращаться

Ошибка: данные не могут быть прочитаны, поскольку они имеют неправильный формат. "

, и я могу 'Я не могу понять, что я делаю неправильно. Ниже приведен мой код.

Пример данных JSON:

{
            "meta": {
                "name":"Tour of Honor Bonus Listing",
                "version":"18.1.4"
            },
            "bonuses": [
            {
            "bonusCode":"AZ1",
            "category":"ToH",
            "name":"Anthem Tour of Honor Memorial",
            "value":1,
            "city":"Anthem",
            "state":"AZ",
            "flavor":"Flavor Text Goes Here"
            }
            ]
        }

Код игровой площадки:

import Foundation
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

struct JsonFile: Codable {
    struct Meta: Codable {
        let name: String
        let version: String
    }
    struct JsonBonuses: Codable {
        let bonusCode: String
        let category: String
        let name: String
        let value: Int
        let city: String
        let state: String
        let flavor: String
    }
    let meta: Meta
    let bonuses: [JsonBonuses]

}

let url = URL(string: "http://www.tourofhonor.com/BonusData.json")!

URLSession.shared.dataTask(with: url) { data, response, error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
        PlaygroundPage.current.finishExecution()
    }
    guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
        print("Error: invalid HTTP response code")
        PlaygroundPage.current.finishExecution()
    }
    guard let data = data else {
        print("Error: missing data")
        PlaygroundPage.current.finishExecution()
    }

    // feel free to uncomment this for debugging data
    // print(String(data: data, encoding: .utf8))

    do {
        let decoder = JSONDecoder()
        let posts = try decoder.decode([JsonFile].self, from: data)

        print(posts.map { $0.meta.name })
        PlaygroundPage.current.finishExecution()
    }
    catch {
        print("Error: \(error.localizedDescription)")
        PlaygroundPage.current.finishExecution()
    }
    }.resume()

Я предполагаю, что у меня естьчто-то в моей структуре неверное, но я не могу понять, что это такое.

(Этот параграф должен сделать инструмент представления счастливым, потому что он говорит, что у меня слишком много кода и недостаточно других деталей.и краткий не совместим с функцией сканирования отправки).

1 Ответ

0 голосов
/ 18 мая 2018

Структура верна, но корневой объект не является массивом (снимите скобки)

let posts = try decoder.decode(JsonFile.self, from: data)
print(posts.bonuses.map{$0.name})
...