2016-04-16 7 views
0

Ich versuche, eine Liste der Artikel herunterzuladen und in eine Tabellenansicht einzufügen. Es scheint jedoch ein Problem zu haben, die JSON-Datei abzurufen und zu analysieren.Fehler beim Analysieren von JSON in Swift 2.0

Mein Code ist wie folgt:

override func viewDidLoad() { 
     super.viewDidLoad() 

     self.downloadArticles() 

     self.tableView.reloadData() 
    } 


    func downloadArticles(){ 
     var url: NSURL 
     url = NSURL(string: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20feed%20where%20url=%27www.abc.net.au%2Fnews%2Ffeed%2F51120%2Frss.xml%27&format=json")! 
     print(url) 
     let task = NSURLSession.sharedSession().dataTaskWithURL(url){ 
      (data, response, error) in 
      if (error != nil){ 
       print("Error \(error)") 
      } else{ 
       self.parseArticleJSON(data!) 
      } 
      self.syncCompleted = true 
      self.tableView.reloadData() 
     } 
     task.resume() 
    } 

    func parseArticleJSON(articleJSON:NSData) 
    { 
     do{ 

      let result = try NSJSONSerialization.JSONObjectWithData(articleJSON, options: NSJSONReadingOptions.MutableContainers) as? NSArray 

      //let jsonData:NSArray = (try NSJSONSerialization.JSONObjectWithData(articleJSON, options:NSJSONReadingOptions.MutableContainers) as? NSArray)! 

      let newArticlesArray = result as NSArray! 
      //NSLog("Found \(newArticlesArray.count) new articles!") 
      for article in (newArticlesArray as NSArray as! [NSDictionary]) 
      { 
       print (article.objectForKey("title")! as? String) 

       //let a = Article (t: <#T##String#>, da: <#T##String#>, de: <#T##String#>, i: <#T##NSURL#>) 

       //articlesArray.addObject(a); 
      } 
     }catch { 
      print("JSON Serialization error") 
     } 

    } 

Im parseArticleJSON Methode (ich weiß, es ist nicht alles komplett fertig ist). Ich erhalte den Fehler in Zeile:

for article in (newArticlesArray as NSArray as! [NSDictionary]) 

heißt es:

fatal error: unexpectedly found nil while unwrapping an Optional value 

habe ich versucht, einige der Forschung hier auf diesen Foren zu tun, aber ich konnte keine Antwort finden, die mir helfen würde, also fragte ich mich, ob jemand mir helfen könnte.

Ich brauche die nativen Swift-JSON-Methoden, um all dies zu tun.

Vielen Dank im Voraus!

+0

Hi, da Ihre Ergebnisvariable null und IS optional sein könnte, sollte die Anweisung for ... in der Anweisung auch Variablen mit optionalen Wrapper verwenden, d. H. "Wie?". Probieren Sie es aus ... –

Antwort

2

Die JSON viel mehr verschachtelte ist:

typealias JSONDictionary = Dictionary<String,AnyObject> 

func parseArticleJSON(articleJSON:NSData) { 
    do { 
    let jsonObject = try NSJSONSerialization.JSONObjectWithData(articleJSON, options: []) 
    if let jsonResult = jsonObject as? JSONDictionary, 
     query = jsonResult["query"] as? JSONDictionary, 
     results = query["results"] as? JSONDictionary, 
     newArticlesArray = results["item"] as? [JSONDictionary] { 
     for article in newArticlesArray { 
     print(article["title"] as! String) 
     } 
    } 
    } catch let error as NSError { 
    print(error) 
    } 
} 

Aus diesem tief verschachtelte JSON es eine Bibliothek wie SwiftyJSON zu verwenden, empfohlen wird.

Da der Code nur das JSON-Objekt liest, wird die Option MutableContainers überhaupt nicht benötigt und in Swift werden immer native Auflistungstypen verwendet, es sei denn, Sie haben absolut keine Wahl.

+0

Danke, es funktioniert super –

0

diesen Code versuchen,

if let jsonObject: AnyObject = NSJSONSerialization.JSONObjectWithData(articleJSON, options: nil, error:&error) { 
    if let dict = jsonObject as? NSDictionary { 
     println(dict) 
    } else { 
     println("not a dictionary") 
    } 
} else { 
    println("Could not parse JSON: \(error!)") 
} 

hoffen, seine hilfreich

Verwandte Themen