Way 1
func fetchData2() {
let jsonUrlString = "https://....."
URLSession.shared.dataTask(with: URL(string: jsonUrlString)! ) { (data, _, error) in
if error != nil {
print(error)
}
if let data = data {
do {
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
let response = json["response"] as? [String: Any]
let location = response!["location"] as? [[String: Any]]
for dic in location! {
print("\(dic["prefecture"]) \(dic["city"])")
}
}
} catch let error as NSError {
print(error.debugDescription)
}
}
}.resume()
}
Way 2
func jsonParser(urlString: String, completionHandler: @escaping (_ data: NSDictionary) -> Void) -> Void
{
let urlPath = urlString
guard let endpoint = URL(string: urlPath) else {
print("Error creating endpoint")
return
}
URLSession.shared.dataTask(with: endpoint) { (data, response, error) in
do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}
completionHandler(json)
} catch let error as JSONError {
print(error.rawValue)
} catch let error as NSError {
print(error.debugDescription)
}
}.resume()
}