Alamofire json swift 2.2

Posted

技术标签:

【中文标题】Alamofire json swift 2.2【英文标题】: 【发布时间】:2016-04-22 19:27:30 【问题描述】:

我正在尝试使用 Alamofire 提取一些 Facebook 地点名称的数据,但我没有运气。 这是我尝试过的,但我无法弄清楚如何让它发挥作用。

xcode 7.3 swift2.2

所以graph api的结果是这样的


   "data": [
      
         "category": "Local business",
         "category_list": [
            
               "id": "272705352802676",
               "name": "Outdoors"
            ,
            
               "id": "115725465228008",
               "name": "Region"
            
         ],
         "location": 
            "street": "Athens",
            "city": "Palai\u00f3n F\u00e1liron",
            "state": "",
            "country": "Greece",
            "zip": "17562",
            "latitude": 37.9284637008,
            "longitude": 23.6944070162
         ,
         "name": "THE NAME OF THE PLACE",
         "id": "THE ID"
      

我想进入“数据”,只取最后两行的名称和地点的 ID。

这是我的代码!

override func viewDidLoad() 
    super.viewDidLoad()

 Alamofire.request(.GET, "https://graph.facebook.com/search", parameters: ["q": "", "type": "place", "center": "37.928319,23.7036673", "distance": "10000", "access_token": "ACCESS-TOKEN", "expires_in": "5184000"])
    .responseJSON  response in
        if let JSON = response.result.value 
            print("JSON: \(JSON["data"]!["name"]!)")
        


我得到了这个错误

致命错误:在展开可选值时意外发现 nil

知道为什么吗?

【问题讨论】:

print("JSON: (JSON)") 将是一个好的开始。您正在强制解开“数据”和“名称”。如果说您的 JSON 与您期望的不同,则任何一次都可能失败。无论如何,不​​建议在这种情况下强制展开,最好使用'if let'。可能是某种“错误 JSON”。 【参考方案1】:

好吧,我猜这很简单,不值得问这个问题,但这就是解决方案

 Alamofire.request(.GET, "https://graph.facebook.com/search", parameters: ["q": "", "type": "place", "center": "37.928319,23.7036673", "distance": "10000", "access_token": "475827182628380|6U-mk-1etGQHwrXRSMF4Ht2zOyc", "expires_in": "5184000"])
            .responseJSON  (responseData) -> Void in
                if((responseData.result.value) != nil) 
                    let swiftyJsonVar = JSON(responseData.result.value!)

                    if let resData = swiftyJsonVar["data"].arrayObject 
                        self.arrRes = resData as! [[String:AnyObject]]
                    
                    if self.arrRes.count > 0 
                        self.kati.reloadData()
                    
                
        

在牢房里

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("checkInCell", forIndexPath: indexPath)
    var dict = arrRes[indexPath.row]
    cell.textLabel?.text = dict["name"] as? String
    //cell.detailTextLabel?.text = dict["email"] as? String
    return cell

别忘了也使用 SwiftyJSON!

【讨论】:

以上是关于Alamofire json swift 2.2的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 在 swift 2.2 中抛出错误

如何使用 Alamofire (Swift 2.2) 获取 Twitter 访问令牌

在 Alamofire Swift 2.2 中使用 completionHandler

是否可以在 Swift 2.2 中使用使用 Alamofire 的 Soap API

Swift - Alamofire - 解析 JSON

Alamofire 奇怪的 JSON 前缀 - Swift 2.0