如何在使用HTTPful请求JSON数据时获取数组而不是对象


How to get an array instead of object when requesting JSON data using HTTPful

我使用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

但我一直在阅读文档,甚至是源代码,我在任何地方都看不到这个选项。。。我唯一能想到的方法是制作我自己的MimeHandlerAdapter,它可以制作json_decode($data, true),但如果在某个地方有选择的话,这似乎是一种非常倒退的方式。。。

回答这个问题可能有点晚,但我在使用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,它有时会将响应解析为一个时髦的数组。文档说它应该自动工作,但我遇到了一些问题

$response = Request::get('some/awesome/url')
    ->expects('application/json')
    ->send();

我从未使用过这个库。但在一项研究中,我发现您可以在第11行的src/Httpful/Handlers/JsonHandler.php中找到此选项。

你会看到:

private $decode_as_array = false;

这个标志在第27行的同一个文件中使用:

$parsed = json_decode($body, $this->decode_as_array);

您必须将decode_as_array设置为true值,才能执行此操作:

'Httpful'Httpful::register('Httpful'Mime::JSON, new 'Httpful'Handlers'JsonHandler(array('decode_as_array' => true)));

请求::get调用

之前