Alamofire не распознает результат как JSON

Я вызываю публичный API из PHP, используя Guzzle. Возвращает действительный JSON (проверено на JSONLint.com). Однако, когда я пытаюсь вернуть это в свое приложение для iOS, Alamofire это не нравится. Я попытался декодировать JSON, а затем перекодировать его, но я получаю тот же результат. Я не могу понять, почему Alamofire не примет это. Я протестировал веб-сервис с Paw, и он возвращает результат JSON с content-type из application/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);

Свифт код:

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)")
}
}

0

Решение

Попробуйте проверить API от клиента REST, такого как Почтальон подтвердить результаты. Поскольку браузер может отображать содержимое HTML, возможно, вы не сможете увидеть его в окне браузера, но вы можете легко проверить это в представлении источника страницы.
Я всегда проверяю API в Postman, потому что он гарантирует, что в API нет ошибок со стороны сервера, и что потребитель API может легко использовать этот API.

0

Другие решения

Я смог заставить его работать, заключив JSON в квадратные скобки.

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector