Actually be very careful with that response, as it might look like JSON dictionary, but it's not. It's a JSON string, for which the string, itself, is the JSON dictionary.
So, retrieve it, use NSJSONSerialization
with the .AllowFragments
option to handle the string.
Then take the resulting string, convert that to a data, and now you can parse the actual JSON:
let url = NSURL(string: "http://www.claritin.com/weatherpollenservice/weatherpollenservice.svc/getforecast/90210")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { data, response, error in
if data != nil {
var error: NSError?
if let jsonString = NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments, error: &error) as? String {
if let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding) {
if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error) as? NSDictionary {
println(json)
} else {
println("unable to parse dictionary out of inner JSON: \(error)")
println("jsonString = \(jsonString)")
}
}
} else {
println("unable to parse main JSON string: \(error)")
println("data = \(NSString(data: data, encoding: NSUTF8StringEncoding))")
}
} else {
println("network error: \(error)")
}
}
This JSON string of JSON representation is a curious format, requiring you to jump through some extra hoops. You might want to contact the provider of that web service to see if there are other formats for retrieving this data (e.g. as a simple JSON response).