【问题标题】:Unable to parse JSON from AFNetworking's responseObject无法从 AFNetworking 的 responseObject 解析 JSON
【发布时间】:2014-06-17 09:06:28
【问题描述】:

我已阅读 this question 并尝试在 Swift 中从 AFNetworking 的 responseObject 解析 JSON,但结果始终为 nil

这是我的代码的摘录:

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, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary // without "!" I will get EXC_BAD_INSTRUCTION at run time.

【问题讨论】:

    标签: json afnetworking swift


    【解决方案1】:

    您可以将 responseObject 转换为字典

    例如

    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"; }
    
        let responseDict = response as Dictionary<String, AnyObject>
        var token = responseDict["token"] as String!
        println(token)
    
    },
        failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
    })
    

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

    编辑:Xcode6 beta2 发布后,上面的代码不再工作。需要先将其转换为 AnyObject,然后再转换为字符串

    let token : String? = (responseDict["token"] as AnyObject?) as? String
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多