我正在尝试使用laravel 4中的Guzzle 4.0
从外部API获取数据。
我试过
$client = new \GuzzleHttp\Client();
$response = $client->get('https://openexchangerates.org/api/latest.json?app_id=************');
echo "<pre>";
dd($response->getBody());
--它给了我口吻对象,而不是JSON响应,我在浏览器中直接点击了那个url,它提供了正确的json数据。
响应我从口香糖中得到:
object(GuzzleHttp\Stream\Stream)#151 (6) {
["stream":"GuzzleHttp\Stream\Stream":private]=>
resource(6) of type (stream)
["size":"GuzzleHttp\Stream\Stream":private]=>
NULL
["seekable":"GuzzleHttp\Stream\Stream":private]=>
bool(true)
["readable":"GuzzleHttp\Stream\Stream":private]=>
bool(true)
["writable":"GuzzleHttp\Stream\Stream":private]=>
bool(true)
["uri":"GuzzleHttp\Stream\Stream":private]=>
string(10) "php://temp"
}
有人能告诉我怎样才能得到正确的json数据吗?
提前感谢您的支持。
发布于 2015-09-08 13:21:34
试着将身体转换成字符串:
dd((string) $response->getBody());
实际上,getBody()
方法确实返回一个对象,这是通过设计实现的。如果您尝试将它用作字符串(例如使用echo
),则会自动将其转换为字符串。
但是,在dd()
调用中,需要显式转换为字符串,否则将得到对象输出。
这是来自文档的:
可以使用getBody方法检索响应的主体。主体可以用作字符串,可以转换为字符串,也可以用作类似于流的对象。 $body = $response->getBody();//隐式地将主体强制转换为字符串并回显它回送$body;//显式地将主体强制转换为字符串$stringBody = ( string ) $body;
有关更多细节,请参见此处:
http://docs.guzzlephp.org/en/latest/quickstart.html#using-responses
发布于 2015-09-08 13:24:33
如果您的响应确实是JSON,则可以调用响应对象上的json()
方法返回JSON数组。
print_r($response->json());
这是在一个调用中进行转换和解析的,我觉得这有点干净。
https://stackoverflow.com/questions/32458759
复制相似问题