如何获取JSON数据

问题描述 投票:0回答:1

我想制作一个应用程序,调用forecast.io的API来获取我的应用程序中的天气。有人说我使用 SwiftyJSON 和 Alamofire 。我是编程新手,这是我的第一个应用程序,所以我真的不知道如何正确执行它。这是我现在的代码,但我不知道它是否正确,它可以工作,但没有进行调用,我需要输入 JSON 数据来获取“温度”数据:

// Get Weather
let URL = "https://api.forecast.io/forecast/apikey/\(lat),\(long)"
Alamofire.request(.GET, URL, parameters: nil)
    .responseJSON { response in
        let jsonData: AnyObject?
        do {
            jsonData = try NSJSONSerialization.JSONObjectWithData(response.data!, options: [])
        } catch  {                                                               
            
        }            
}

它只是说“jsonData”从未被使用过。这就是我为接到电话而写的全部内容。

ios swift swift2 alamofire swifty-json
1个回答
2
投票

一旦有了

jsonData
变量,您就可以像常规
NSDictionary
一样使用它,方法是将以下行放在第一行之后的
do
块中

guard let jsonDict = jsonData as? NSDictionary else {return}

如果您想获得当前的天气预报,您所要做的就是

guard let currentForecast = jsonDict["currently"] as? NSDictionary else {return}

然后您可以使用此链接

获取其属性
guard let temperature = currentForecast["apparentTemperature"] as? Int else {return}

总而言之,您的代码应该如下所示

let URL = "https://api.forecast.io/forecast/apikey/\(lat),\(long)"
Alamofire.request(.GET, URL, parameters: nil)
    .responseJSON { response in
        let jsonData: AnyObject?
        do {
            jsonData = try NSJSONSerialization.JSONObjectWithData(response.data!, options: [])
            guard let jsonDict = jsonData as? NSDictionary else {return}
            guard let currentForecast = jsonDict["currently"] as? NSDictionary else {return}
            guard let temperature = currentForecast["apparentTemperature"] as? Int else {return}
            print(temperature)
        } catch  {
            //TODO: Handle errors
        }
}

catch 块用于处理错误,因此如果它无法解析 JSON,您将在其中显示一条警报,指出存在错误。

© www.soinside.com 2019 - 2024. All rights reserved.