SwiftyJSON 问题 Swift 2
SwiftyJSON Problems Swift 2
我有一个 API URL return JSON 数据,你可以在这里找到 https://itunes.apple.com/us/rss/topmovies/limit=25/json
我想要 return 此 JSON 数据中的所有电影片名。
我正在使用 SwiftyJSON 框架来解析来自 URL 的 JSON 数据。我正在使用 NSURLSession.dataTask 从 URL 开始解析。
问题是我想要 return 的 JSON 数据没有 returning 任何东西。
这是一些代码 -
JSON 数据 URL -
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()
}
您的代码完全按照预期执行:它打印电影的标题。
有了这个:
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 { [=11=]["im:name"]["label"].stringValue }
print(titles)
print(titles)
给出了一个标题数组:
["Jurassic World", "Avengers: Age of Ultron", "Spy", "Entourage", "Pixels", "Froning", "Pitch Perfect 2", "Cartel Land", "Aladdin", "Furious 7 (Extended Edition)", "Magic Mike XXL", "\'71", "The Age of Adaline", "Cast Away", "Cinderella (2015)", "San Andreas", "Mad Max: Fury Road", "Hotel Transylvania", "Paddington", "Mission: Impossible - Ghost Protocol", "Aloha", "Dope", "Man on Wire", "Me and Earl and the Dying Girl", "The Overnight"]
顺便说一下,正如编译器在警告中所说的那样,没有必要为 JSON()
使用 do catch
,因为它不会抛出。
我有一个 API URL return JSON 数据,你可以在这里找到 https://itunes.apple.com/us/rss/topmovies/limit=25/json
我想要 return 此 JSON 数据中的所有电影片名。
我正在使用 SwiftyJSON 框架来解析来自 URL 的 JSON 数据。我正在使用 NSURLSession.dataTask 从 URL 开始解析。
问题是我想要 return 的 JSON 数据没有 returning 任何东西。
这是一些代码 -
JSON 数据 URL -
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()
}
您的代码完全按照预期执行:它打印电影的标题。
有了这个:
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 { [=11=]["im:name"]["label"].stringValue }
print(titles)
print(titles)
给出了一个标题数组:
["Jurassic World", "Avengers: Age of Ultron", "Spy", "Entourage", "Pixels", "Froning", "Pitch Perfect 2", "Cartel Land", "Aladdin", "Furious 7 (Extended Edition)", "Magic Mike XXL", "\'71", "The Age of Adaline", "Cast Away", "Cinderella (2015)", "San Andreas", "Mad Max: Fury Road", "Hotel Transylvania", "Paddington", "Mission: Impossible - Ghost Protocol", "Aloha", "Dope", "Man on Wire", "Me and Earl and the Dying Girl", "The Overnight"]
顺便说一下,正如编译器在警告中所说的那样,没有必要为 JSON()
使用 do catch
,因为它不会抛出。