perteadrian perteadrian - 1 year ago 68
iOS Question

How to get the JSON data in my app

So , I want to make an app that calls the API of forecast.io to get weather in my app. Someone said me to use SwiftyJSON and Alamofire . I'm new to programming and this is my first app so i dont really know how to do it right. That's my code for now , but I don't know if it is right or not , it works but the call isn't made and I need to enter the JSON data to get the "temperature" data:

// 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 {





}

}


It only says that "jsonData" was never used. That's all i wrote for getting the call.

Answer Source

Once you have the jsonData variable, you can use it like a regular NSDictionary by putting the following lines in the do block after the first line

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

If you want to get the current forecast, all you have to do is

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

And then you can get its properties using this link

guard let temperature = currentForecast["apparentTemperature"] as? Int else {return}

All in all, your code should look something like this

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
        }
}

The catch block is to handle errors, so if it could not parse the JSON that's where you would display an alert saying that there was an error.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download