如何在我的应用程序中获取JSON数据

时间:2015-11-09 17:06:47

标签: ios api swift2 alamofire swifty-json

所以,我想创建一个调用forecast.io API的应用程序,以便在我的应用程序中获取天气。有人说我使用SwiftyJSON和Alamofire。我是编程的新手,这是我的第一个应用程序,所以我真的不知道如何做到这一点。这是我现在的代码,但我不知道它是否正确,它可以工作,但是电话没有发出,我需要输入JSON数据才能获得&#34 ;温度"数据:

        // 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"从未使用过。这是我为接到电话所写的全部内容。

1 个答案:

答案 0 :(得分:2)

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

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

如果您想获得当前预测,您只需要

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

然后您可以使用this link

获取其属性
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,那么您将显示一条警告,指出存在错误。