2017-07-07 2 views
1

J'écris un client pour une API ...Comment obtenir une sortie JSON valide à partir de la réponse dans Zend Framework 3?

use Zend\Http\Client; 
use Zend\Http\Request; 
use Zend\Json\Json; 
... 
$request = new Request(); 
$request->getHeaders()->addHeaders([ 
    'Accept-Charset' => 'UTF-8', 
    'Accept' => 'application/hal+json', 
    'Content-Type' => 'application/hal+json; charset=UTF-8', 
]); 
$apiAddress = 'http://my.project.tld/categories'; 
$request->setUri($apiAddress); 
$request->setMethod('GET'); 
$client = new Client(); 
$response = $client->dispatch($request); 
$data = $response->getContent(); 

... et obtenir un cassé JSON comme ceci:

1f9e <-- What is it? 
{"_links... 
\u043 <-- What is it? 
1a6... 
tfoli <-- What is it? 
0 

La chaîne est separaten en cinq lignes:

  • 1ère ligne: seulement 1f9e
  • 2ème ligne: première partie de contenu
  • ligne 3d: string 1a6
  • 4e ligne: la seconde partie de contenu
  • 5ème ligne: 0

Pourquoi ai-je des symboles/chaînes supplémentaires? Comment éviter cela une sortie JSON valide?

Répondre

2

Le problème avec la méthode getContent() de l'objet de réponse. Il ne peut pas décoder le contenu qu'il reçoit de la demande. S'il vous plaît jeter un oeil à here. Cela pourrait être la raison. J'ai peut-être tort!

Ainsi, la méthode getBody() fait le travail de décodage pour le contenu de la demande. Donc s'il vous plaît utiliser cette méthode au lieu de getContent().

$data = $response->getBody(); 

Espérons que cela pourrait vous aider!

+0

Merci beaucoup pour votre réponse! Je n'ai pas utilisé 'getBody()' parce que j'avais confiance dans la fonction de saisie semi-automatique de mon IDE. Le 'Zend \ Http \ Client # dispatch (...)' renvoie un 'Zend \ Stdlib \ ResponseInterface'. Je ne l'ai pas considéré et, quand j'ai seulement 'getContent (...)' et 'getMetadata (...)', je pensais que le 'getBody (...)' n'était plus fourni. Mais bien sûr, l'objet concret renvoyé par le 'dispatch (...)' est un 'Zend \ Http \ Response' et il fournit la méthode dont j'ai besoin -' getBody() '. Maintenant ça marche. Merci beaucoup! – automatix

+0

Vous êtes toujours les bienvenus! – unclexo