Swift中的JSON解码问题
我试图使用openweathermap.org api返回JSON中的“main”键。由于某种原因,我一直被“无法转换”的错误所困扰。我不太清楚为什么我不能转换JSON,有人有什么想法吗?多谢各位Swift中的JSON解码问题,json,swift,Json,Swift,我试图使用openweathermap.org api返回JSON中的“main”键。由于某种原因,我一直被“无法转换”的错误所困扰。我不太清楚为什么我不能转换JSON,有人有什么想法吗?多谢各位 override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white let url = "https://api.openweathe
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
let url = "https://api.openweathermap.org/data/2.5/weather?zip=10514&appid=#####################"
getData(from: url)
}
struct Response: Codable {
let weather: MyResult
}
struct MyResult: Codable {
let main: String
}
下面是调用以更改JSON访问权限的函数
private func getData(from url:String) {
URLSession.shared.dataTask(with: URL(string:url)!, completionHandler: {
data, response, error in
guard let data = data, error == nil else {
print("Something went wrong")
return
}
// have data
var result: Response?
do {
result = try JSONDecoder().decode(Response.self, from: data)
} catch {
print("failed to convert")
}
guard let json = result else {
return
}
print(json.weather.main)
}).resume()
}
编辑:这就是json的作用。我是否创建的结构不正确?如果是这样的话,我应该如何正确地做呢?多谢各位
{"coord":{"lon":-73.73,"lat":41.2},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}],"base":"stations","main":{"temp":291.67,"feels_like":288.73,"temp_min":290.93,"temp_max":292.59,"pressure":1024,"humidity":72},"visibility":10000,"wind":{"speed":5.7,"deg":130},"clouds":{"all":40},"dt":1594956028,"sys":{"type":1,"id":4403,"country":"US","sunrise":1594892168,"sunset":1594945530},"timezone":-14400,"id":0,"name":"Mount Kisco","cod":200}
在JSON响应中,属性
weather
是一个数组:
{..., weather: [{...}] }
但在您的模型中,它需要一个MyResult
类型。将其更改为需要一个[MyResult]
数组:
struct Response: Codable {
let weather: [MyResult]
}
检查您的响应模型并与json进行比较response@luffy_064我添加了JSON示例。我是否创建的结构不正确?如果是这样,你能告诉我如何正确地创建它们吗?谢谢你