访问来自 API 响应的对象

你好,我从 API post 请求中获取了一个 $response,下面是 $response

LINE\LINEBot\Response::__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

这会给我一个错误:

无法访问私有属性 LINE\\LINEBot\\Response::$body

我还尝试使用 SO 上的答案将对象更改为数组,但未能解决它。

这可能是一个新手问题,但任何输入都将高度赞赏。谢谢

原文链接 https://stackoverflow.com/questions/70971301

点赞
stackoverflow用户436560
stackoverflow用户436560

解决方案

查看文档,我们可以看到两个方法:

因此,根据要求的不同,可以使用 $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));

然而,这也无法访问私有属性。

2022-02-03 12:36:01