无法解析AFNetworking的responseObject中的JSON

前端之家收集整理的这篇文章主要介绍了无法解析AFNetworking的responseObject中的JSON前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了 this question并尝试从Swift中的AFNetworking的responSEObject解析JSON,但结果总是为零.

以下摘自我的代码

let manager = AFHTTPRequestOperationManager()

manager.requestSerializer = AFJSONRequestSerializer()
manager.responseSerializer = AFJSONResponseSerializer()
manager.requestSerializer.setAuthorizationHeaderFieldWithUsername(username,password: password)

manager.POST("endpoint-that-respond-token-in-json",parameters: nil,success: { (operation: AFHTTPRequestOperation!,responSEObject: AnyObject!) in
        println(responSEObject.description) // { token = "bd8f26da-219a-4a88-be80-b09207dfc067"; }

        var x: NSString = responSEObject.description

        var error: NSError?
        var data = x.JSONString().dataUsingEncoding(NSUTF8StringEncoding)
        println(data) // <227b5c6e 20202020 746f6b65 6e203d20 5c226539 35613462 36642d38 6361612d 34343537 2d623937 612d3330 63613236 62316338 34315c22 3b5c6e7d 22>

        var dataString = NSString(data: data,encoding: NSUTF8StringEncoding)
        println(dataString) // "{\n    token = \"e95a4b6d-8caa-4457-b97a-30ca26b1c841\";\n}"


        var json = NSJSONSerialization.JSONObjectWithData(data,options: NSJSONReadingOptions.MutableContainers,error: &error) as NSDictionary!
        println(json) // nil
    },failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
        println(error)
    })

注:

var json = NSJSONSerialization.JSONObjectWithData(data,error: &error) as NSDictionary // without "!" I will get EXC_BAD_INSTRUCTION at run time.

解决方法

您可以将responSEObject强制转换为字典

例如

manager.POST("endpoint-that-respond-token-in-json",responSEObject: AnyObject!) in
    println(responSEObject.description) // { token = "bd8f26da-219a-4a88-be80-b09207dfc067"; }

    let responseDict = response as Dictionary<String,AnyObject>
    var token = responseDict["token"] as String!
    println(token)

},error: NSError!) in
})

附:从字典返回的值总是可选的

编辑:在Xcode6 beta2发布后,上面的代码不再起作用了.需要先将其强制转换为AnyObject,然后再转换为字符串

let token : String? = (responseDict["token"] as AnyObject?) as? String
原文链接:https://www.f2er.com/js/158811.html

猜你在找的JavaScript相关文章