Arrays 在swift中从JSON创建一个数组

Arrays 在swift中从JSON创建一个数组,arrays,json,swift,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 Codi

我正在尝试将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()
    }

您的
CodingKeys
与属性名匹配,因此您可以完全摆脱
enum

struct UserHosting: Codable {
    let companyName: String
    let website: String
    let street: String
    let housenumber: String
    let zip: String
    let city: String    
}
由于JSON中有一些snake-case密钥,因此可以将JSONDecoder.KeyDecoding策略更改为
convertFromSnakeCase
,如下所示

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
上面的解码器将处理分配给结构的
companyName
属性的键,如
companyName

最后,您可以在
do catch
块中解码JSON,因此在出现错误的情况下,我们将收到一条关于出错原因的消息

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

当结构的属性名和来自服务器的属性名与从API获得的
JSON响应一致时,为什么要使用
CodingKeys
。而
self?中的
dataSource
属性是什么。dataSource=try!JSONDecoder().decode([User\u Hosting].self,from:data)
?在Swift中,我们更喜欢骆驼箱(camelCase)而不是蛇箱(Snake\u Case)。因此,您可以使用这一行
let decoder=JSONDecoder()decoder.decodingstrategy=.convertFromSnakeCase
,然后使用
let companyName作为let companyName
。不要尝试
,使用适当的
do{…}catch{print(error)}
,这样您就不会错过解码过程中可能发生的任何错误。你问题的答案很可能就在那份书面声明中。并在DispatchQueue.main.async之前执行解码,正如前面多次指出的那样,不要使用localizedDescription do
print(error)
,而应使用更详细的错误message@AamirRq我想把字母索引放在UITableview的右边,只对公司名称进行排序,但我不知道哪个数组有数据。