Разбор JSON в Swift с нулевыми значениями - PullRequest
0 голосов
/ 24 апреля 2020

Я использую Swift 5 и Xcode 11. Я пытаюсь проанализировать JSON, возвращающийся с этого сайта, API, который я разрабатываю. http://aarontcraig-001-site1.htempurl.com/api/values

Значение JSON, возвращаемое этим вызовом API:

[
    {
        "Businesses": [],
        "Customer": null,
        "ID": 1,
        "Name": "Coffee Shop",
        "CustomerID": null
    },
...
]

Продолжается массив. Некоторые записи являются нулевыми, другие нет. Однако, когда я его анализирую, все они возвращаются, ноль.

Вот мой код:

let url = "http://aarontcraig-001-site1.htempurl.com/api/values"
        guard let finalURL = URL(string: url) else {
            return
        }

        URLSession.shared.dataTask(with: finalURL) { (data, response, error) in
            guard let data = data else {return}

            do {
                let myData = try JSONDecoder().decode([Value].self, from: data)

                print(myData)
            }
            catch {
                print("Error parsing \(error)")
            }

и структура, которую я использую, чтобы перехватить все это:

struct Value: Codable {
    let businesses : [String]?
    let customer : String?
    let iD : Int?
    let name : String?
    let customerID : String?
}

Все, что я получаю, - это нулевые значения, хотя многие из них явно нет. Это то, что возвращается.

[Sunrise.Value (предприятия: ноль, клиент: ноль, iD: ноль, имя: ноль, идентификатор клиента: ноль), Sunrise.Value (бизнес: ноль, клиент: ноль, iD: ноль, имя: ноль, идентификатор клиента: ноль), Sunrise.Value (предприятия: ноль, клиент: ноль, iD: ноль, имя: ноль, идентификатор клиента: ноль), Sunrise.Value (бизнес: ноль, клиент: ноль, iD: ноль, имя: ноль, идентификатор клиента: ноль), Sunrise.Value (предприятия: ноль, клиент: ноль, iD: ноль, имя: ноль, идентификатор клиента: ноль), Sunrise.Value (бизнес: ноль, клиент: ноль, iD: ноль, имя: ноль, идентификатор клиента: ноль)]

Что я делаю не так? Даже если я попытаюсь просто захватить имя, которое имеет значение для каждой записи, оно устанавливает его в ноль. Я получаю данные, потому что, если я ставлю точку останова на данные, я вижу их там.

1 Ответ

2 голосов
/ 24 апреля 2020

Сопоставьте имена свойств из JSON с членами вашей структуры, используя CodingKeys:

struct Value: Codable {
    let businesses: [String]?
    let customer: String?
    let id: Int
    let name: String
    let customerID: String?

    enum CodingKeys: String, CodingKey {
        case businesses = "Businesses"
        case customer = "Customer"
        case id = "ID"
        case name = "Name"
        case customerID = "CustomerID"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...