Alamofire 响应在 JSON 内容之前包含文本 将其与 SwiftyJSON 一起使用

Alamofire response contain text before JSON content use it with SwiftyJSON

我正在使用 Alamofire 请求 JSON 对象并使用 SwiftyJSON 访问它。

我的请求的响应是这样的:

// JSON webservice ...
[
    {
        "message":"Please connect"
    }
]

如您所见,我需要删除字符串“// JSON webservice ...”,因为它实际上不是有效的 JSON 对象。 请注意,我正在使用 .responseString 否则我无法删除字符串部分。

所以为了删除我正在做的字符串:

let jsonString = data?.stringByReplacingOccurrencesOfString("// JSON webservice ...", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)

现在我可以使用我的 String 了:

var json = SwiftyJSON.JSON(jsonString!)

我可以打印 json :

println(json)

但是无论我打印什么值

println(json[0]["message"].string)

为零。

我终于找到了解决方案:

  • 我们从 .responseString 方法中获取我们的字符串(数据)
  • 我们去掉导致JSON对象序列化失败的部分
  • 我们将字符串转换为 NSData 并尝试序列化我们的 JSON 对象:

    let data = jsonString?.dataUsingEncoding(NSUTF8StringEncoding)
    let jsonData = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSArray?
    
  • 现在应该没问题了,尝试打印 JSON 对象的值时一切正常

    var json = SwiftyJSON.JSON(jsonData!)
    println(json[0]["message"])
    

它打印出正确的值。