2017-09-13 2 views
0

Ich rufe eine öffentliche API von PHP mit Guzzle. Es gibt gültiges JSON (validiert auf JSONLint.com) zurück. Wenn ich jedoch versuche, das in meine iOS-App zurückzuliefern, gefällt es Alamofire nicht. Ich habe versucht, den JSON zu dekodieren und dann neu zu kodieren, aber ich bekomme das gleiche Ergebnis. Ich kann nicht herausfinden, warum Alamofire es nicht akzeptieren wird. Ich habe den Webdienst mit Paw getestet und gibt ein JSON-Ergebnis mit content-type von application/json zurück.Alamofire erkennt das Ergebnis nicht als JSON

Der Fehler, den ich bekommen ist:

JSON could not be serialized because of error: The data couldn’t be read because it isn’t in the correct format.

PHP-Code:

$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 Code:

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

Versuchen Sie, 'responseString' anstelle von' responseJSON' zu verwenden und konvertieren Sie die Zeichenfolge in ein JSON und parsen. –

+0

@BadhanGanesh, habe ich das versucht, aber kann nichts mit der resultierenden Zeichenfolge zu tun scheinen. Die Konvertierung in JSON gibt nur null zurück. – Lastmboy

Antwort

0

Versuchen Sie, die API von einem REST-Client wie Postman Check-out zu validiere die Ergebnisse. Da der Browser den HTML-Inhalt rendern kann, können Sie ihn möglicherweise nicht im Browserfenster sehen, aber Sie können dies einfach in der Seitenquellansicht überprüfen. Ich überprüfe immer die APIs in Postman, weil es sicherstellt, dass keine Fehler in der API von der Serverseite gibt und dass die API-Consumer diese API einfach verwenden kann.

+0

Wie ich in meinem Beitrag erwähnt habe, verwende ich Paw als meinen REST-Client (native App, die viel besser ist als Postman). Ich erwähnte auch, dass ich das JSON bei JSONLint.com validiert habe. Das heißt, ich habe es auch über Postman laufen lassen und habe JSON zurückbekommen. – Lastmboy

0

Ich konnte es durch die Verpackung der JSON in eckigen Klammern zu arbeiten.

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