我的问题很简单,但找不到解决方案。我知道有很多关于如何以其他方式执行此操作的教程,但我想保持简单。
如果JSON html如下所示,我知道如何获取数据:
{"amount":"224.60","currency":"USD"}
但是如果这样,我不知道如何获取数据:
"main":{"temp":280.3,"pressure":1023,"humidity":75,"temp_min":280.15,"temp_max":280.37}
如何告诉我需要从“主要”帐户中获取信息?
我的代码如下:
struct main: Decodable {
let humidity: String
}
let url = "http://api.openweathermap.org/data/2.5/weather?q=Vilnius,LTU&appid=8a3e3ef324cffc653933f3216efcf80f"
let urlObj = URL(string: url)
URLSession.shared.dataTask(with: urlObj!) {(data, response, error) in
do {
var airs = try JSONDecoder().decode(main.self, from: data!)
print(airs.humidity)
} catch {
print("error")
}
}.resume()
当我尝试获取金额时,在我的第一个示例中工作正常。但这不适用于我的第二个示例。
答案 0 :(得分:0)
您可以尝试
struct Root: Codable {
let main: Main
}
struct Main: Codable {
let temp: Double
let pressure, humidity: Int
let tempMin, tempMax: Double
enum CodingKeys: String, CodingKey {
case temp, pressure, humidity
case tempMin = "temp_min"
case tempMax = "temp_max"
}
}
var airs = try JSONDecoder().decode(Root.self, from: data!)
OR
do {
let con = try JSONSerialization.jsonObject(with:data, options: [:]) as! [String:Any]
let dataCC = con["main"] as! [String:Any]
let finData = try JSONSerialization.data(withJSONObject:dataCC, options: [:])
let userCon = try JSONDecoder().decode(Main.self, from:finData)
print(userCon)
}
catch {
print(error)
}