2016-04-21 86 views
0

我已經添加到我的項目SwiftyJSON.swift文件,我試圖從網上獲取一些數據。現在我的項目運行,但直到我試圖從字典中獲取json數組的行。我無法理解問題出在哪裏,但我猜測它必須是非常愚蠢的,因爲我剛剛開始學習迅速。iOS編程,獲取JSON數據

我只是試圖在控制檯中打印來自該網址的所有電影的名稱,並且在我設法實現此性能後,我將嘗試獲取電影的摘要,然後將它們放入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() 
+0

嘗試打印出'json'字典的內容,通過''print(「json contents is \(json)」)'「在你試圖獲得'movies'之前」。我有興趣找出如果真的有'入口',我猜是有的,但它可能嵌套在其他東西里。 –

+0

通過觀察這個,我會在黑暗中刺戳並說json沒有一個叫做入口的關鍵字。如果你想強制把這個錯誤改成你想要的那樣,它可能會讓你知道發生了什麼 –

+0

@MichaelDautermann我剛剛在我試圖獲得電影的那一行之前添加了你的打印行,但它仍然沒有打印任何東西,我在控制檯上唯一的東西就是前面打印的bbbbb –

回答

1

entry是JSON數組,使用.array

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

而且一般小費。不要將這些值例如

movie["something"] as? String 

而是使用內置的功能:


更新

尋找您的代碼更接近我看到你acctually不使用SwiftyJSON.swift可言。 要使用SWIFTY您解析JSON文本是這樣,並得到一個JSON對象:

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

請再看看文檔:

https://github.com/SwiftyJSON/SwiftyJSON

我認爲你正在閱讀的章節「爲什麼是Swift中典型的JSON處理不好?「。該部分解釋了在Swift中管理json的本機和「壞」方式,真正的文檔更加糟糕。

+0

仍然無法工作,它僅在控制檯中打印出bbbbb,那>> :( –