【问题标题】:Alamofire Get Request and JSON ResponseAlamofire 获取请求和 JSON 响应
【发布时间】:2015-06-20 12:46:12
【问题描述】:

我正在尝试使用Yoda API 并使用Alamofire Swift 框架发送请求。我知道 API 工作正常,因为我已经使用我的 Mashape API 密钥多次测试了端点。我还可以看到正在发送请求(我的应用程序下的 Mashape 主页)。但是我的 JSON 响应始终是 nil

func handleRequest(words:String){
        var saying = words.stringByReplacingOccurrencesOfString(" ", withString: "+");
        saying = "?sentence=" + saying;
        let url = NSURL(string: (baseURL+saying));
        println(url);
        var response:String;
        Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = additionalHeaders;
        Alamofire.request(.GET, url!).responseJSON { (_, _, JSON, _) in
            println(JSON);

        }
    }

words 字符串可以是“这是我的第一句话”,它会根据 API 规范自动将空格替换为“+”。 请忽略多个println语句,它们仅用于调试。

这只是概念验证代码,它故意不做太多错误检查,因此并不漂亮。如果您有任何建议,我将不胜感激。

【问题讨论】:

  • 如果您可以包含实际使用的 URL,帮助您会容易得多。
  • 当然,一个可以传递给url常量yoda.p.mashape.com/…的例子。
  • 您当前使用_ 忽略的最后一个闭包参数是NSError,您可以检查一下为什么JSON 可能是nil

标签: ios json swift alamofire


【解决方案1】:

出于某种原因,我对 JSON 的 Alamofire 请求也遇到了问题。这是我使用 Alamofire 处理 JSON 请求的方式:

Alamofire.request(.GET, urlTo, parameters: nil, encoding: .URL).responseString(completionHandler: {
        (request: NSURLRequest, response: NSHTTPURLResponse?, responseBody: String?, error: NSError?) -> Void in

        // Convert the response to NSData to handle with SwiftyJSON
        if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding) {
            let json = JSON(data: data)
            println(json)
        }
})

我强烈建议您使用SwiftyJSON 以更好、更简单的方式管理 JSON,这取决于您。

希望对你有所帮助。

【讨论】:

  • 您的代码工作正常,除了 Xcode 在 if 条件下对演员大喊大叫。 if let data = (responseBody as! NSString) 注意 as! 而不是 as
  • 一切都好。我非常感谢您的回复,让我头疼不已!
  • 我对在获取 almofire 请求中提供参数有点困惑
【解决方案2】:

Alamofire 请求有几种处理响应的方法。尝试处理数据响应并将其转换为字符串。确认响应 JSON 正常。

Alamofire.request(.GET, url!).response { (_, _, data, error) in
    let str = NSString(data: data, encoding: NSUTF8StringEncoding)
    println(str)
    println(error)
}

解析 JSON 数据时也会出现校验错误。

【讨论】:

  • 最好使用 String(data: data,encoding: NSUTF8StringEncoding) 代替 NSString 对象