PHP解析Google Calendar API JSON:提取summary与start字段遇阻求助
解决PHP提取Google Calendar API节假日信息的问题
我明白你现在的困扰——已经能拿到正确的JSON数据,但就是抽不出summary和start字段对吧?其实核心问题大概率是没找对JSON里的层级结构,毕竟Google Calendar V3的返回数据是有固定嵌套的。
先给你直接上可行的代码方案,两种处理方式任选:
方式一:转成关联数组处理(更直观)
// $data 是你从Google API拿到的JSON字符串 $calendarData = json_decode($data, true); // 第二个参数true把JSON转成PHP关联数组 // 先做有效性校验,避免报错 if ($calendarData && isset($calendarData['items']) && is_array($calendarData['items'])) { // 遍历每个节假日事件 foreach ($calendarData['items'] as $holiday) { // 提取摘要,用??处理字段不存在的情况 $summary = $holiday['summary'] ?? '未命名节假日'; // 提取开始时间:全天事件用date,带具体时间的用dateTime $startTime = $holiday['start']['date'] ?? ($holiday['start']['dateTime'] ?? '无开始时间'); // 这里可以替换成你自己的业务逻辑,比如存数据库或输出 echo "节假日:{$summary},开始时间:{$startTime}<br>"; } } else { echo '未获取到有效节假日数据'; }
方式二:以对象形式处理
如果你习惯用对象操作,也可以用这种写法:
$calendarData = json_decode($data); // 不填第二个参数,转成PHP对象 if ($calendarData && isset($calendarData->items) && is_array($calendarData->items)) { foreach ($calendarData->items as $holiday) { $summary = $holiday->summary ?? '未命名节假日'; $startTime = $holiday->start->date ?? ($holiday->start->dateTime ?? '无开始时间'); echo "节假日:{$summary},开始时间:{$startTime}<br>"; } }
关键注意点
- Google Calendar的返回里,所有事件都嵌套在顶级的
items数组里,你之前的遍历可能没定位到这个层级,导致找不到字段 - 节假日一般是全天事件,所以
start里用date字段;如果是带具体时间的活动,会用dateTime,用??运算符可以兼容两种情况 - 一定要加有效性校验,避免API返回异常时PHP报错
内容的提问来源于stack exchange,提问作者Suneth Kalhara
相关产品推荐
相关产品推荐

