如何 json_encode PHP Google Calendar API 返回的对象
How to json_encode PHP object returned by Google Calendar API
首先 - 我不是 PHP 开发人员。我专注于前端,但我想通过一些个人项目来扩展我的 knowledge/play 以加深我的理解。因此,我的一些术语和对我想要实现的目标的基本理解可能有点...... 'off'.
我已按照 Google 提供的所有步骤进行操作,并成功使用 Google 日历 API,我可以使用简单的 [=] 列出日历事件16=]
我的问题在于如何使这些数据有用。我想用 JSON 来做到这一点。我知道 json_encode()
函数,但我不确定我应该如何在我想要实现的目标的上下文中使用它(即有一个 JSON 文件可以挂接到我的数据需要最终在前端显示日历)。我知道 json_encode()
尊重 属性 visibility/scope 但这是我的问题 - 我不知道如何确保 json_encode()
也会对受保护的 properties/methods 进行编码对象我被退回了。
这是我的代码:
$eventsArgs = array(
'maxResults' => 10,
'singleEvents' => true,
);
$events = $calendarService->events->listEvents('***@gmail.com', $eventsArgs);
$listEvents = fopen('list_events.json', 'w');
foreach($events->getItems() as $event) {
fwrite($listEvents, json_encode($event, JSON_PRETTY_PRINT));
}
fclose($listEvents);
我想引入受保护的 properties/methods,例如 start
和 end
,如此处所示,使用简单的 var_dump()
...
["modelData":protected]=> array(5) {
["creator"]=>
array(3) {
["email"]=>
string(23) "***@gmail.com"
["displayName"]=>
string(14) "***"
["self"]=>
bool(true)
}
["organizer"]=>
array(3) {
["email"]=>
string(23) "***@gmail.com"
["displayName"]=>
string(14) "***"
["self"]=>
bool(true)
}
["start"]=>
array(1) {
["dateTime"]=>
string(25) "2014-04-27T05:00:00+01:00"
}
["end"]=>
array(1) {
["dateTime"]=>
string(25) "2014-04-27T06:00:00+01:00"
}
我真的很想在这里自学,不幸的是碰壁了,老实说,我找到的答案对我的理解来说有点太技术化了。欢迎技术和非技术解释!
感谢阅读。
因此,正如您所指出的,问题在于您要访问的属性受到保护,json_encode
尊重这一点并且不会访问它们。 Read up on public, private, and protected. Good stuff
因为这些值是受保护的,所以您必须将您想要的数据从 $event
中提取出来并放入一个不受保护的数组中,然后 json_encode
那个。未经测试的代码如下:
$eventsArgs = array(
'maxResults' => 10,
'singleEvents' => true,
);
$events = $calendarService->events->listEvents('***@gmail.com', $eventsArgs);
$listEvents = fopen('list_events.json', 'w');
foreach($events->getItems() as $event) {
$jsonArr = array(
"start"=>$event->start->dateTime
,"end"=>$event->end->dateTime
);
fwrite($listEvents, json_encode($jsonArr, JSON_PRETTY_PRINT));
}
fclose($listEvents);
现在即使是那个代码也可能不起作用。您可能必须找到适当的方法(即 'method',如:属于 class 的函数)从 Google 日历事件中获取您想要的属性,然后将它们放入一个数组,而不是 json_encode 它。
所以 'getter' 方法可能是:$event->get('start')->dateTime
或其他。我没有使用 Google 日历 API 的经验,所以在这方面无法真正帮助您
最后,要知道您可以获得 PHP 脚本 echo
json_encode
d 结果,因此您不需要该文件。 (当然,我不知道你所有的代码是什么样的,所以这可能是个坏主意)
foreach(...) {
echo json_encode($yourArray);
}
我遇到了和你一模一样的问题!我终于发现:
$json = json_encode( (array)$events);
答案来自另一个post:Here
请注意:
它在外部数组键上生成 Unicode NUL 字符:\u0000*\u0000。但是具有开始值和结束值的完整结构仍然存在。如果您有兴趣删除 Nul 字符,可以使用 str_replace() 或 explode。 Understanding what \u0000 is in PHP / JSON and getting rid of it
Terminus 上面的回答很好,但使用这个更适合我的情况,因为我需要从 google node.js api 匹配不同的 json 文件。
首先 - 我不是 PHP 开发人员。我专注于前端,但我想通过一些个人项目来扩展我的 knowledge/play 以加深我的理解。因此,我的一些术语和对我想要实现的目标的基本理解可能有点...... 'off'.
我已按照 Google 提供的所有步骤进行操作,并成功使用 Google 日历 API,我可以使用简单的 [=] 列出日历事件16=]
我的问题在于如何使这些数据有用。我想用 JSON 来做到这一点。我知道 json_encode()
函数,但我不确定我应该如何在我想要实现的目标的上下文中使用它(即有一个 JSON 文件可以挂接到我的数据需要最终在前端显示日历)。我知道 json_encode()
尊重 属性 visibility/scope 但这是我的问题 - 我不知道如何确保 json_encode()
也会对受保护的 properties/methods 进行编码对象我被退回了。
这是我的代码:
$eventsArgs = array(
'maxResults' => 10,
'singleEvents' => true,
);
$events = $calendarService->events->listEvents('***@gmail.com', $eventsArgs);
$listEvents = fopen('list_events.json', 'w');
foreach($events->getItems() as $event) {
fwrite($listEvents, json_encode($event, JSON_PRETTY_PRINT));
}
fclose($listEvents);
我想引入受保护的 properties/methods,例如 start
和 end
,如此处所示,使用简单的 var_dump()
...
["modelData":protected]=> array(5) {
["creator"]=>
array(3) {
["email"]=>
string(23) "***@gmail.com"
["displayName"]=>
string(14) "***"
["self"]=>
bool(true)
}
["organizer"]=>
array(3) {
["email"]=>
string(23) "***@gmail.com"
["displayName"]=>
string(14) "***"
["self"]=>
bool(true)
}
["start"]=>
array(1) {
["dateTime"]=>
string(25) "2014-04-27T05:00:00+01:00"
}
["end"]=>
array(1) {
["dateTime"]=>
string(25) "2014-04-27T06:00:00+01:00"
}
我真的很想在这里自学,不幸的是碰壁了,老实说,我找到的答案对我的理解来说有点太技术化了。欢迎技术和非技术解释!
感谢阅读。
因此,正如您所指出的,问题在于您要访问的属性受到保护,json_encode
尊重这一点并且不会访问它们。 Read up on public, private, and protected. Good stuff
因为这些值是受保护的,所以您必须将您想要的数据从 $event
中提取出来并放入一个不受保护的数组中,然后 json_encode
那个。未经测试的代码如下:
$eventsArgs = array(
'maxResults' => 10,
'singleEvents' => true,
);
$events = $calendarService->events->listEvents('***@gmail.com', $eventsArgs);
$listEvents = fopen('list_events.json', 'w');
foreach($events->getItems() as $event) {
$jsonArr = array(
"start"=>$event->start->dateTime
,"end"=>$event->end->dateTime
);
fwrite($listEvents, json_encode($jsonArr, JSON_PRETTY_PRINT));
}
fclose($listEvents);
现在即使是那个代码也可能不起作用。您可能必须找到适当的方法(即 'method',如:属于 class 的函数)从 Google 日历事件中获取您想要的属性,然后将它们放入一个数组,而不是 json_encode 它。
所以 'getter' 方法可能是:$event->get('start')->dateTime
或其他。我没有使用 Google 日历 API 的经验,所以在这方面无法真正帮助您
最后,要知道您可以获得 PHP 脚本 echo
json_encode
d 结果,因此您不需要该文件。 (当然,我不知道你所有的代码是什么样的,所以这可能是个坏主意)
foreach(...) {
echo json_encode($yourArray);
}
我遇到了和你一模一样的问题!我终于发现:
$json = json_encode( (array)$events);
答案来自另一个post:Here
请注意:
它在外部数组键上生成 Unicode NUL 字符:\u0000*\u0000。但是具有开始值和结束值的完整结构仍然存在。如果您有兴趣删除 Nul 字符,可以使用 str_replace() 或 explode。 Understanding what \u0000 is in PHP / JSON and getting rid of it
Terminus 上面的回答很好,但使用这个更适合我的情况,因为我需要从 google node.js api 匹配不同的 json 文件。