2016-03-14 40 views
0

我正在使用Alamofire来解析JSON API,但是,我无法弄清楚如何解析来自Alamofire的响应数据。使用Alamofire从Feed中提取JSON数据

当我尝试循环取出的数据时,XCode给我“分段错误:11”错误。

这里是我当前的代码:

var tableData:NSArray // I have tried several variable types, NSDictionary, String etc. 

-

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.getJsonData() 
} 

func getJsonData() { 
    Alamofire.request(.GET, "https://hotell.difi.no/api/json/mattilsynet/smilefjes/tilsyn", parameters: [:]) 
     .responseJSON { response in 

      if let JSON = response.result.value { 
       // print("JSON: \(response.result)") 

       for entry in JSON["entries"] { 
        print("\(entry)") // this is where everything crashes 
       } 


      } 

      self.doTableRefresh() 
    } 
} 

func doTableRefresh() { 
    dispatch_async(dispatch_get_main_queue(), { 
     self.tableView.reloadData() 
     return 
    }) 
} 

,这是什么JSON结果正确的数据格式:https://hotell.difi.no/api/json/mattilsynet/smilefjes/tilsyn?我如何获取数据并填充tableview?

回答

2

转换应对的NSDictionary的NSArray和:

func getJsonData() { 
    Alamofire.request(.GET, "https://hotell.difi.no/api/json/mattilsynet/smilefjes/tilsyn", parameters: [:]) 
     .responseJSON { response in 

      if let JSON = response.result.value as? NSDictionary{ 

       if let entries = JSON["entries"] as? NSArray{ 

        for entry in entries { 

         if let entry = entry as? NSDictionary { 

          for (key, value) in entry { 
           print("\(key) - \(value)") 
          } 
         } 
        } 
       } 

      } 
    } 
} 
1

您必须指定您的预期值(带SwiftyJSON)类型:

for entry in JSON["entries"] { // Here 
    print(entry.stringValue) 
} 
+0

感谢您的快速回复。但是,Xcode说“可选类型的值AnyObject ?!”不打开;你的意思是使用'!'要么 '?'?” –

+0

哎呀,对不起我的坏!太快了 – Thomas

+0

现在工作吗? :) – Thomas

1

不使用SwiftyJSON,这个想法是要知道每个对象,并成功地低垂的权利类型。

response.result.value是一个词典:[String:AnyObject],而json["entries"]的内容是一个字典数组:[[String:AnyObject]]。等

例子:

func getJsonData() { 
    Alamofire.request(.GET, "https://hotell.difi.no/api/json/mattilsynet/smilefjes/tilsyn", parameters: [:]) 
     .responseJSON { response in 

      if let json = response.result.value as? [String:AnyObject] { 
       if let entries = json["entries"] as? [[String:AnyObject]] { 
        for entry in entries { 
         print(entry) // each entry is a dictionary of type [String:AnyObject] 
        } 
        // example of accessing an entry: 
        if let firstEntry = entries.first, value = firstEntry["adrlinje1"] as? String { 
         print(value) // "Christian IV gate 3" 
        } 
       } 
      } 
    } 
}