создать массив из JSON в Swift - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь преобразовать данные JSON в массив, но я не знаю, как это сделать.

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

struct User_Hosting: Codable {
    let company_name: String
    let website: String
    let street: String
    let housenumber: String
    let zip: String
    let city: String    

    enum CodingKeys: String, CodingKey {
        case company_name = "company_name"
        case website = "website"
        case street = "street"
        case housenumber = "housenumber"
        case zip = "zip"
        case city = "city"
    }
}

А вот и другие коды:

let url = URL(string: "myURL.com")

        URLSession.shared.dataTask(with: url!, completionHandler: { [weak self] (data, response, error) in
            guard let data = data, error == nil else {
                print(error?.localizedDescription ?? "An error occurred")
                return
            }
            DispatchQueue.main.async {
                self?.dataSource = try! JSONDecoder().decode([User_Hosting].self, from: data)
            }
        }).resume()
    }

1 Ответ

1 голос
/ 27 мая 2019

Ваши CodingKeys соответствуют именам свойств, так что вы можете избавиться от enum на всех

struct UserHosting: Codable {
    let companyName: String
    let website: String
    let street: String
    let housenumber: String
    let zip: String
    let city: String    
}

Поскольку у вас есть несколько ключей регистра змей в JSON, вы можете изменить JSONDecoder.keyDecodingStrategy в convertFromSnakeCase, например,

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

Выше декодер будет обрабатывать ключи, такие как company_name, которые будут назначены для companyName свойства вашей структуры.

Наконец, вы можете декодировать вашJSON в блоке do-catch, поэтому в случае ошибки у нас будет сообщение о том, что пошло не так.

do {
    self.dataSource = try decoder.decode([UserHosting].self, from: data)
} catch {
    print("JSON Decoding Error \(error)")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...