iOS编程,获取JSON数据

时间:2016-04-21 23:14:39

标签: ios json swift swifty-json

我已经在我的项目中添加了SwiftyJSON.swift文件,我正在尝试从网上获取一些数据。现在我的项目运行但直到我试图从字典中的json获取数组的行。我无法理解问题出在哪里,但我猜它必须是非常愚蠢的东西,因为我刚开始学习swift。

我只是想在控制台中打印来自该网址的所有电影的名称,在我设法实现这一性能后,我将尝试获取电影的摘要,然后将它们放入TableView中。

import UIKit

class FirstViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //grab the status code and check if the transfer was successful == 200
        let requestURL: NSURL = NSURL(string: "https://itunes.apple.com/us/rss/topmovies/limit=50/json")!
        let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithRequest(urlRequest) {
            (data, response, error) -> Void in

            let httpResponse = response as! NSHTTPURLResponse
            let statusCode = httpResponse.statusCode

            if (statusCode == 200) {

                //sort through the stations key and cast the data into an array of dictionaries
                do{
                    let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
                    print("bbbbb")

// From here on, it doesn't print anything anymore
                    if let movies = json["entry"] as? [[String: AnyObject]] {
                        print(movies)
                        print("test")

                        for movie in movies {

                            if let name = movie["name"] as? String {
                                print("mmmm")
                                print("%@ (Built %@)",name)

                            }
                        }

                    }

                }catch {
                    print("Error with Json: \(error)")
                }
            }
        }
    task.resume()

1 个答案:

答案 0 :(得分:1)

entry是一个json数组,使用.array

if let movies = json["entry"].array {
  for movie in movies {
     // Do stuff
  }
}

也是一般性提示。不要施放值,例如

movie["something"] as? String

而是使用内置功能:

movie["something"].string

<强>更新

仔细查看代码,我发现您实际上根本没有使用SwiftyJSON.swift。 要使用Swifty,您可以像这样解析json文本并获取JSON对象:

let jsonObj = JSON(data: yourData) // data is a NSData

请再看一下文档:

https://github.com/SwiftyJSON/SwiftyJSON

我认为您正在阅读“为什么Swift中典型的JSON处理不好?”一节。该部分解释了在Swift中管理json的本地和“坏”方式,真正的文档更进一步。