首先 - 我不是PHP开发人员。我专注于前端,但我想扩展我的知识/玩一些个人项目,以进一步了解。因此,我的一些术语和基本理解我想要实现的目标可能有点......“关闭”。
我已按照Google提供的所有步骤操作,并设法使用Google Calendar API,我可以使用简单的var_dump()
我的问题在于尝试使这些数据变得有用。我想用JSON做到这一点。我知道json_encode()
函数,但不确定我应该如何在我想要实现的内容中使用它(即有一个JSON文件可以挂钩到我最终需要显示的数据前端的日历)。我知道json_encode()
尊重属性可见性/范围,但这是我的问题 - 我无法弄清楚如何确保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) {
fwrite($listEvents, json_encode($event, JSON_PRETTY_PRINT));
}
fclose($listEvents);
我想提取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"
}
我真的想在这里教育自己,不幸的是,我找到了答案,如果我说实话,我找到的答案对我的理解来说有点太技术性了。技术和非技术解释欢迎!
感谢阅读。
答案 0 :(得分:2)
因此,正如您所指出的那样,问题是您要访问的属性受到保护,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);
现在即使该代码也可能无效。您可能必须找到适当的方法('方法'如同:属于某个类的函数)从Google日历事件中获取您想要的属性,然后将它们放入数组,而不是json_encode。
所以' getter'方法可能是:$event->get('start')->dateTime
或其他东西。我没有使用Google Calendar API的经验,因此无法在这方面为您提供帮助
最后,要知道您可以将PHP脚本echo
设为json_encode
d结果,这样您就不会需要该文件。 (当然,我不知道你的所有代码是什么样的,所以这可能是一个坏主意)
foreach(...) {
echo json_encode($yourArray);
}
答案 1 :(得分:1)
我和你有完全相同的问题!我终于找到了:
$json = json_encode( (array)$events);
答案来自另一篇文章: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文件。