You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:02:16