从api响应访问对象



你好,我从API发布请求中得到了一个$response,下面是$response

LINELINEBotResponse::__set_state(array(
'httpStatus' => 200,
'body' => '{"richMenuId":"richmenu-5a489c22120e48cec70f3c3cd3b318db"}',
'headers' => 
array (
'server' => 'openresty',
'date' => 'Thu, 03 Feb 2022 11:31:51 GMT',
'content-type' => 'application/json',
'content-length' => '58',
'cache-control' => 'no-cache, no-store, max-age=0, must-revalidate',
'expires' => '0',
'pragma' => 'no-cache',
'x-content-type-options' => 'nosniff',
'x-frame-options' => 'DENY',
'x-line-request-id' => '84ababf8-81e9-4cda-aeb0-25d9b44e9b24',
'x-xss-protection' => '1; mode=block',
),
))

有人能告诉我如何访问";richMenuId";从上面的物体?

我尝试按如下方式访问该对象$response->body->richMenuId

这给了我一个错误:

Cannot access private property LINE\LINEBot\Response::$body

我也尝试过使用SO上的答案将对象更改为数组,但无法解决。

这可能是一个棘手的问题,但任何意见都将受到高度赞赏。感谢

解决方案

查看文档,我们看到两种方法:

  • getRawBody(https://github.com/line/line-bot-sdk-php/blob/0500634336ec1b524587a978b917b7b3a3679aef/src/LINEBot/Response.php#L74)
  • getJSONDecodedBody(https://github.com/line/line-bot-sdk-php/blob/0500634336ec1b524587a978b917b7b3a3679aef/src/LINEBot/Response.php#L84)

因此,可以使用$response->getRawBody()$response->getJSONDecodedBody(),这取决于它们中哪一个更符合要求。

未成功的方法

我最初的想法是通过

json_decode(json_encode($response), true)['body']

但这不起作用,private成员不会生成到JSON中。因此,我的下一个想法是使用反射:

$reflectionClass = new ReflectionClass('LINE\LINEBot\Response');
var_dump($reflectionClass->getProperty('body')->getValue($response));

然而,这也没有到达私人财产。

最新更新