我正在使用HTTPful在PHP中发送一些请求并使用JSON获取数据,但是库正在将结果转换为对象,我希望结果是一个数组。换句话说,它执行json_decode($data)
而不是json_decode($data, true)
。
有某处,使用后者的选项,但我无法弄清楚在哪里。该选项已在v0.2.2中添加:
- FEATURE Add support for parsing JSON responses as associative arrays instead of objects
但我一直在阅读documentation甚至是the source,我在任何地方都看不到这个选项...我能想到的唯一方法就是自己制作MimeHandlerAdapter
这是一个json_decode($data, true)
,但如果在某个地方有一个选项,它似乎是一个非常倒退的方式......
答案 0 :(得分:3)
回答这个问题可能有点迟,但我在使用Httpful时做了一些研究并找到答案。 Httpful为每个mime类型使用一组默认处理程序。如果在您发送请求之前注册了一个,它将使用您注册的请求。方便的是,有一个Httpful\Handlers\JsonHandler
类。构造函数接受一组参数。它使用的唯一一个是$decode_as_array
。因此,您可以使它返回如下数组:
// Create the handler
$json_handler = new Httpful\Handlers\JsonHandler(array('decode_as_array' => true));
// Register it with Httpful
Httpful\Httpful::register('application/json', $json_handler);
// Send the request
$response = Request::get('some-url')->send();
我意识到如果你不告诉请求期望JSON,它有时会将响应解析成一个时髦的数组。文档称它应该自动运行,但我遇到了一些问题。因此,如果您得到奇怪的输出,请尝试明确告诉请求期望JSON如此:
$response = Request::get('some/awesome/url')
->expects('application/json')
->send();
答案 1 :(得分:2)
我从未使用过这个库。但在一项研究中,我发现你可以在第11行的src / Httpful / Handlers / JsonHandler.php找到这个选项。
你会看到:
private $decode_as_array = false;
此标志用于第27行的同一文件:
$parsed = json_decode($body, $this->decode_as_array);
答案 2 :(得分:1)
您必须将 decode_as_array 设置为 true 值才能执行此操作:
\Httpful\Httpful::register(\Httpful\Mime::JSON, new \Httpful\Handlers\JsonHandler(array('decode_as_array' => true)));
在 Request :: get 调用之前