SwiftyJSON问题Swift 2

时间:2015-10-06 20:52:25

标签: json swift parsing swifty-json

我有一个返回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()


}

1 个答案:

答案 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(),因为它不会抛出。