带反斜杠的JSON编码

Mea*_*her 9 swift alamofire swifty-json

我使用Alamofire和SwiftyJSOn来解析JSON输出.它工作得很好,但有些网站给json提供了转义输出.我在下面使用Alamofire

    Alamofire.request(.POST, url, parameters: param, encoding: .JSON)
        .responseJSON { (req, res, json, error) in
         var json = JSON(json!)
Run Code Online (Sandbox Code Playgroud)

Site为我提供了带有转义字符串的JSON结果,因此SwiftyJSON无法对其进行解码.我怎样才能在下面转换

{
    "d": "{\"UniqeView\":{\"ArrivalDate\":null,\"ArrivalUnitId\":null,\"DeliveryCityName\":null,\"DeliveryTownName\":null},\"ErrorMessage\":null,\"Message\":null,\"IsFound\":false,\"IsSuccess\":true}"
}
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

{
       "d": {
          "UniqeView": {
             "ArrivalDate": null,
             "ArrivalUnitId": null,
             "DeliveryCityName": null,
             "DeliveryTownName": null
          },
          "ErrorMessage": null,
          "Message": null,
          "IsFound": false,
          "IsSuccess": true
       }
    }
Run Code Online (Sandbox Code Playgroud)

aya*_*aio 6

// This Dropbox url is a link to your JSON
// I'm using NSData because testing in Playground
if let data = NSData(contentsOfURL: NSURL(string: "https://www.dropbox.com/s/9ycsy0pq2iwgy0e/test.json?dl=1")!) {

    var error: NSError?
    var response: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error)
    if let dict = response as? NSDictionary {
        if let key = dict["d"] as? String {

            let strData = key.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
            var error: NSError?
            var response: AnyObject? = NSJSONSerialization.JSONObjectWithData(strData!, options: NSJSONReadingOptions.allZeros, error: &error)

            if let decoded = response as? NSDictionary {
                println(decoded["IsSuccess"]!)   // => 1
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想你必须解码两次:包装对象及其内容.


Mea*_*her 5

@ericd评论帮我解决了这个问题.我接受了他对这个问题的回答.由于我使用Alamofire进行异步操作,而SwiftyJSON,我无法使用他的代码.这是Alamofire和SwiftyJSON的代码.

Alamofire.request(.POST, url, parameters: param, encoding: .JSON)
   .responseJSON { (req, res, json, error) in
    if(error != nil) {
        NSLog("Error: \(error)")
        failure(res, json, error)
    }
    else {

        var jsond = JSON(json!)
        var data = jsond["d"].stringValue.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
        jsond = JSON(data: data!)
Run Code Online (Sandbox Code Playgroud)

  • 当我使用.data(使用:.utf8,allowLossyConversion:false)时,它会发送类似"24字节"的内容.你是如何设法让它工作的? (2认同)