我使用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类型使用一组默认的处理程序。如果其中一个在您发送请求之前已注册,它将使用您注册的那个。方便的是,有一个HttpfulHandlersJsonHandler
类。构造函数接受一个参数数组。它唯一使用的是$decode_as_array
。因此,您可以让它返回这样的数组:
// Create the handler
$json_handler = new HttpfulHandlersJsonHandler(array('decode_as_array' => true));
// Register it with Httpful
HttpfulHttpful::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值,才能执行此操作:
HttpfulHttpful::register(HttpfulMime::JSON, new HttpfulHandlersJsonHandler(array('decode_as_array' => true)));
在请求::get调用