从Alamofire响应中访问JSON值

时间:2017-09-23 06:10:16

标签: ios json swift

我正在向返回以下JSON的本地服务器发出请求:

{"session_key":"somecodexyz1234"}

以下代码用于尝试打印session_key value. But this is always evaluated to nil。。

Alamofire.request(url, method: .post, parameters: parameters).responseJSON(completionHandler: {
response in
print("Request: \(String(describing: response.request))")
print("Response: \(String(describing: response.response))")

print("Response code: \(String(describing: response.response?.statusCode))")


if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
    print("Data: \(utf8Text)") // original server data as UTF8 string
}}

if response.data  != nil {
    let json = JSON(data: response.data!)

    // changes 
    if let arr : NSArray = json as? NSArray
    {
          let sk = arr.value(forKey: "session_key") as? String
          if sk != nil {print(sk)}
    }
}

以下是输出(print(sk)未执行,因为它是零):

Request: Optional(http://127.0.0.1:5000/code)
Response: Optional(<NSHTTPURLResponse: 0x60800023f260> { URL: http://127.0.0.1:5000/code } { status code: 200, headers {
    "Content-Length" = 40;
    "Content-Type" = "application/json";
    Date = "Sat, 23 Sep 2017 06:02:25 GMT";
    Server = "Werkzeug/0.12.2 Python/3.4.3";
} })
Response code: Optional(200)
Data: "{\"session_key\":\"somecodexyz1234\"}"

2 个答案:

答案 0 :(得分:3)

使用以下代码在json中获取almofire的响应。在您的代码中,您直接检查response.data而不是首先检查response.result,如下所示。

Alamofire.request(requestURL, method:.post, parameters: param as? Parameters, encoding: URLEncoding(destination: .httpBody), headers: headers).responseJSON(completionHandler: { (response) in
            switch response.result
            {
            case .success(let responseJSON):
                // If request success then you will get response in json here
                if responseJSON is String{
                    print("Reponse is string")
                }
                else if responseJSON is NSDictionary{
                    print("Reponse is Dictionary")
                }
                else if responseJSON is NSArray{
                    print("Reponse is Array")
                }
                else{
                    print("Any object")
                    return
                }
                print("Response : \((dicResponse)")

                break
            case .failure(let error):
                // If request is failure then got error here.
                break
            }
        })

答案 1 :(得分:0)

您正在使用SwiftyJSON,所以为什么要再次转换let arr : NSArray = json as? NSArray。你可以这样做。

Alamofire.request(url, method: .post, parameters: parameters).responseJSON(completionHandler: {
            response in
            print("Request: \(String(describing: response.request))")
            print("Response: \(String(describing: response.response))")

            print("Response code: \(String(describing: response.response?.statusCode))")

            if response.result.isSuccess, let result = response.result.value {
                let json = JSON(result)

                // Here is your session key
                let sk = json["session_key"].stringValue

            } else {
                //Failure
            }
        })