ALAMOFIRE的{JSON_encode

时间:2017-01-26 07:03:22

标签: json swift alamofire

我有一个非常简单的Swift代码来检索JSON数据。但不知怎的,它无法正常工作。

Alamofire.request("*URL*").validate().responseJSON { response in
        print(response.result.value)
            if response.result.isSuccess {
               if let userList:[[String:Any]] = response.result.value as? [[String:Any]] {
                    for user:[String:Any] in userList {
                        if let userName = user["name"] as? String {
                            self._myList.append(User(name: userName, value: true))
                        }
                    }
                }
                self.tableView.reloadData()
            } else {
                print(response.result.error)
            }
    }

在执行期间,我在控制台中收到此错误消息:

可选(Alamofire.AFError.responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed)(错误域= NSCocoaErrorDomain代码= 3840"字符0周围的值无效。" UserInfo = {NSDebugDescription =字符0周围的值无效})))

致电Alamofire.request后的印刷品正在显示" nil"在控制台中。

如果我使用.responseString而不是.responseJSON(但它只显示一个字符串),我不明白它是否正常工作。我真的需要使用.responseJSON,因为我需要解析结果。

Web浏览器上显示的我的JSON也非常简单:

[{"name":"MrX","value":"0"}]

有什么想法吗?

米卡。

1 个答案:

答案 0 :(得分:0)

使用此

        import Alamofire
        import SwiftyJSON

        let baseURL: String = "http://baseURL.com"
        Alamofire.request(baseURL)
        .responseJSON { response in

            guard response.result.error == nil else {
                // got an error in getting the data, need to handle it
                print("error calling GET")
                print(response.result.error!)
                return
            }

            if let value = response.result.value {

                let json = JSON(value) // JSON comes from SwiftyJSON
                print(json) // to see the JSON response
                let userName = json["name"].array // .array comes from SwiftyJSON
                for items in userName! {
                  self._myList.append(User(name: items, value: true))
                }

                DispatchQueue.main.async {
                  self.tableView?.reloadData()
                }

            }
    }

并取出 .validate(),如果你拿出来,你会看到更详细的错误说明。希望有所帮助。