Alamofire没有将结果识别为JSON

时间:2017-09-13 04:05:02

标签: php ios swift alamofire guzzle

我使用Guzzle从PHP调用公共API。它返回有效的JSON(在JSONLint.com上验证)。但是,当我尝试将其返回到我的iOS应用程序时,Alamofire并不喜欢它。我尝试解码JSON然后重新编码它,但我得到相同的结果。我无法弄清楚为什么Alamofire不会接受它。我使用Paw测试了Web服务,并返回content-type application/json的JSON结果。

我得到的错误是:

  

由于错误,无法序列化JSON:数据不可能   阅读因为格式不正确。

PHP代码:

$url = "myUrl";
$client = new GuzzleHttp\Client();

$res = $client->get($url, [
'headers' =>  [
    'Authorization' => "Bearer myKey",
    'Accept' => 'application/json'
    ]
]);

header('Content-type: application/json');
$results = $res->getBody();
$this->response($results, 200);

Swift代码:

let url = serviceUrl + "currentwar"     
let params = [
    "clanId" : "\(clanId)",
]

Alamofire.request(url, parameters: params, encoding: URLEncoding.default)
    .validate()
    .responseJSON { (response) in
        switch response.result {
        case .success(let data):
            self.json = JSON(data)
            print(self.json as Any)

            // process data

            DispatchQueue.main.async(execute: { () -> Void in
                // populate view
            })

        case .failure(let error):
            print("An error occurred: \(error.localizedDescription)")
        }
}

2 个答案:

答案 0 :(得分:0)

尝试从REST客户端(例如Postman)检出API以验证结果。由于浏览器可以呈现HTML内容,因此您可能无法在浏览器窗口中看到它,但您可以轻松地从页面源视图中查看该内容。 我总是检查Postman中的API,因为它确保服务器端的API没有错误,并且API使用者可以轻松使用该API。

答案 1 :(得分:0)

我能够通过将JSON包装在方括号中来实现它。

$result = "[" . $result . "]";