4

我正在使用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),但如果这样做似乎是一种非常倒退的方法某处有一个选项...

4

3 回答 3

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();
于 2014-03-23T21:03:15.080 回答
2

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

在那里你会看到:

private $decode_as_array = false;

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

$parsed = json_decode($body, $this->decode_as_array);
于 2013-11-19T19:00:39.347 回答
1

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

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

Request::get调用之前

于 2016-08-22T14:22:13.287 回答