【发布时间】:2019-05-27 06:44:32
【问题描述】:
我正在尝试将 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 -
添加您从 API 获得的
JSON response。 -
您在
self?.dataSource = try! JSONDecoder().decode([User_Hosting].self, from: data)中的dataSource属性是什么? -
在 Swift 中,我们更喜欢 Camel Case (camelCase) 而不是 Snake Case (snake_case)。所以,你可以使用这条线
let decoder = JSONDecoder() decoder.decordingStrategy = .convertFromSnakeCase,然后使用let company_name as let companyName。 -
不要
try!,使用正确的do {...} catch { print(error) },这样你就不会错过解码过程中可能发生的任何错误。您的问题的答案很可能在该印刷声明中。并在DispatchQueue.main.async之前进行解码