我有一个返回JSON数据的API网址,您可以在此处找到https://itunes.apple.com/us/rss/topmovies/limit=25/json
我想要返回此JSON数据中的所有电影标题。
我正在使用SwiftyJSON Framework来解析URL中的JSON数据。我正在使用NSURLSession.dataTask从URL开始Parse。
问题是我想要返回的JSON数据没有返回任何内容。
这是一些代码 -
JSON数据网址 -
let url = "https://itunes.apple.com/us/rss/topmovies/limit=25/json"
检索JSON数据
func getTheJSONData() throws {
let theURL = NSURL(string: url)
let request = NSURLRequest(URL: theURL!)
//let JSONError : NSError?
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
do {
if error == nil{
let swiftyJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil)
let Name = swiftyJSON["feed"]["entry"][0]["im:name"]["label"].stringValue
//prints nil..
print(Name)
}
} catch {
// report error
print(error)
}
}
task.resume()
}
答案 0 :(得分:0)
您的代码完全符合预期:它会打印电影的标题。
有了这个:
let Name = swiftyJSON["feed"]["entry"][0]["im:name"]["label"].stringValue
print(Name)
你得到一部电影的标题,因为你得到了[0]
数组的第一个元素。
由于您想要获取所有电影标题,而不是使用第一个元素,因此可以使用所有元素。例如:
let swiftyJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil)
let movies = swiftyJSON["feed"]["entry"].arrayValue
let titles = movies.map { $0["im:name"]["label"].stringValue }
print(titles)
print(titles)
提供了一系列标题:
[“Jurassic World”,“复仇者联盟:Ultron时代”,“间谍”,“随行人员”,“像素”,“Froning”,“Pitch Perfect 2”,“Cartel Land”,“Aladdin”,“Furious” 7(加长版)“,”Magic Mike XXL“,”\'71“,”Adaline时代“,”Cast Away“,”Cinderella(2015)“,”San Andreas“,”Mad Max:Fury Road“ ,“特兰西瓦尼亚酒店”,“帕丁顿”,“使命:不可能 - 鬼协议”,“阿罗哈”,“涂料”,“电线上的男人”,“我和厄尔和垂死的女孩”,“一夜之间”]
顺便说一句,正如编译器用警告所说的那样,do catch
没有必要使用JSON()
,因为它不会抛出。