2017-07-07 10 views
1
私はAPIのクライアントを書いている

...Zend Framework 3の応答から有効なJSON出力を取得するにはどうすればよいですか?

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(); 

...と、このように壊れたJSONを取得:

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

を文字列がseparaten 5への行です:

  • 1行目:のみ1f9e
  • 2行目:最初のコンテンツ部分
  • 3Dライン:文字列1a6
  • 第四行目:第2のコンテンツの一部
  • 第5行:0

は、なぜ私は、追加のシンボル/文字列を取得していますか?これを回避するには、有効なJSON出力を取得しますか?

答えて

2

応答オブジェクトのgetContent()メソッドの問題。要求から取得したコンテンツをデコードすることはできません。 hereをご覧ください。これが理由かもしれません。私は間違っているかもしれません!

したがって、getBody()の方法では、要求内容の復号ジョブが実行されます。だからgetContent()の代わりにこのメソッドを使用してください。

$data = $response->getBody(); 

希望すると、これが役立ちます。

+0

ありがとうございました。私は私のIDEのオートコンプリート機能を信頼しているので、 'getBody()'を使用しませんでした。 'Zend \ Http \ Client#dispatch(...)'は 'Zend \ Stdlib \ ResponseInterface'を返します。私はそれを考慮せず、 'getContent(...)'と 'getMetadata(...)'だけで、 'getBody(...)'がもう提供されていないと思った。しかし、 'dispatch(...)'によって返される具体的なオブジェクトは 'Zend \ Http \ Response'であり、必要なメソッド' getBody() 'を提供します。今それは働いている。どうもありがとう! – automatix

+0

いつでもようこそ! – unclexo

関連する問題