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

使用Google Analytics Reporting API时遇dimensionName等字段错误求助

解决Google Analytics Reporting API的JSON格式无效错误

嘿,我一眼就发现问题所在了!你在维度过滤器的配置上搞混了DimensionFilter和DimensionFilterClause的层级关系,还误用了operator的设置位置,这才导致了JSON格式错误。

错误原因拆解

从API返回的错误信息能明确看出几个核心问题:

  • 你直接把DimensionFilter对象传给了setDimensionFilterClauses,但这个方法需要接收的是DimensionFilterClause对象的数组,所以API找不到dimensionName和expressions这些属于DimensionFilter的字段
  • 你给DimensionFilterClause设置了BEGINS_WITH作为operator,但这个对象的operator是用来组合多个过滤器的逻辑运算符(比如AND/OR),而BEGINS_WITH是单个维度过滤器的匹配规则,应该放在DimensionFilter上

修正后的代码

下面是调整好的完整代码,重点修改了过滤器部分的逻辑:

$metrics = [ 
    'pageviews', 
];
// Create the DateRange object.
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
$dateRange->setStartDate("2022-12-01");
$dateRange->setEndDate("2023-01-19");

// Create the Metrics object.
$dataMetrics = [];

foreach ($metrics as $metric) {
    $sessions = new Google_Service_AnalyticsReporting_Metric();
    $sessions->setExpression("ga:" . $metric);
    $sessions->setAlias($metric);
    $dataMetrics[] = $sessions;
}

// 修正后的过滤器配置
$dimensionFilter = new Google_Service_AnalyticsReporting_DimensionFilter();
$dimensionFilter->setDimensionName("ga:pagePath");
// 把匹配规则BEGINS_WITH放在DimensionFilter上
$dimensionFilter->setOperator('BEGINS_WITH');
$dimensionFilter->setExpressions(['/u/joao?preview=614']);

$dimensionFilterClause = new Google_Service_AnalyticsReporting_DimensionFilterClause;
// DimensionFilterClause的operator是逻辑组合符,单个过滤器时可省略或设为AND
$dimensionFilterClause->setFilters([$dimensionFilter]);
$dimensionFilterClause->setOperator('AND');

//Create the Dimensions object.
$pageUrl = new Google_Service_AnalyticsReporting_Dimension();
$pageUrl->setName("ga:pagePath");

// Create the ReportRequest object.
$request = new Google_Service_AnalyticsReporting_ReportRequest();
$request->setViewId("ga:203877"); //test rise
$request->setMetrics($dataMetrics); // METRIC
$request->setDateRanges($dateRange);
$request->setDimensions([$pageUrl]);
// 这里要传DimensionFilterClause对象,而不是DimensionFilter
$request->setDimensionFilterClauses([$dimensionFilterClause]);

$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
$body->setReportRequests([$request]);

return ($this->analytics->reports->batchGet($body)->getReports());

关键修正点

  • 确保DimensionFilter的operator设置正确的匹配规则(BEGINS_WITH)
  • 将DimensionFilter放入DimensionFilterClause的filters数组中
  • 给request的dimensionFilterClauses传入DimensionFilterClause对象,而非直接传DimensionFilter

这样调整后,API就能正确识别你的过滤器配置,不会再返回JSON格式错误啦!

内容的提问来源于stack exchange,提问作者Crazy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:35:13