快速从JSON创建数组

时间:2019-05-27 06:44:32

标签: arrays json swift

我正在尝试将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 个答案:

答案 0 :(得分:1)

您的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属性。

最后,您可以在do-catch块中对JSON进行解码,因此,如果发生错误,我们将收到一条错误消息。

do {
    self.dataSource = try decoder.decode([UserHosting].self, from: data)
} catch {
    print("JSON Decoding Error \(error)")
}