
本文介绍如何从 Google Analytics API 返回的嵌套结构中,精准提取 dimensionValues 和 metricValues 中的 value 字段,并将它们配对组合为形如 ['Unassigned', 64314] 的字符串-数值数组。
本文介绍如何从 google analytics api 返回的嵌套结构中,精准提取 `dimensionvalues` 和 `metricvalues` 中的 `value` 字段,并将它们配对组合为形如 `['unassigned', 64314]` 的字符串-数值数组。
在实际处理 Google Analytics Data API(v1)响应时,rows 字段是一个对象数组,每个对象包含两个关键属性:dimensionValues(维度值,如渠道分组名)和 metricValues(指标值,如会话数)。二者均为对象数组,即使仅含单个元素,也需通过索引访问其内部 value 属性。
✅ 基础场景:每行仅含一个维度 + 一个指标
根据你提供的 API 示例数据,每个 row 的 dimensionValues 和 metricValues 都恰好包含一个对象(如 [{ value: "Unassigned" }] 和 [{ value: 64314 }]),因此可直接通过下标 [0] 安全访问:
const result = [];
const rows = obj.rows;
for (let i = 0; i < rows.length; i++) {
const row = rows[i];
const dimValue = row.dimensionValues?.[0]?.value;
const metricValue = row.metricValues?.[0]?.value;
// 类型安全:确保两者均存在且非 undefined
if (dimValue !== undefined && metricValue !== undefined) {
result.push([dimValue, metricValue]);
}
}
console.log(result);
// 输出示例(部分):
// [['Direct', 789456], ['Organic Search', 7894521], ..., ['Unassigned', 64314], ...]⚠️ 注意:使用可选链操作符 ?. 可避免因某行缺失 dimensionValues 或 metricValues 导致的 TypeError,提升鲁棒性。
? 扩展场景:单行含多个维度或指标
若某行 dimensionValues 或 metricValues 包含多个值(例如多维分析返回 ['Source', 'Medium'] + [sessions, users]),需按位置一一配对。此时应基于较短数组长度进行循环,防止越界:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
const result = [];
for (const row of obj.rows) {
const dims = row.dimensionValues || [];
const metrics = row.metricValues || [];
const len = Math.min(dims.length, metrics.length);
for (let i = 0; i < len; i++) {
const dimVal = dims[i].value;
const metricVal = metrics[i].value;
if (dimVal !== undefined && metricVal !== undefined) {
result.push([dimVal, metricVal]);
}
}
}? 进阶建议:函数式写法(推荐)
使用 map() 和解构更简洁、声明式更强:
const extractPairs = (rows) =>
rows
.filter(row => row.dimensionValues?.[0] && row.metricValues?.[0])
.map(row => [
row.dimensionValues[0].value,
Number(row.metricValues[0].value) // 显式转数字,确保数值类型
]);
const pairs = extractPairs(obj.rows);
// → [['Direct', 789456], ['Unassigned', 64314], ...]✅ 最终目标实现:仅提取 'Unassigned' 对应项
若只需特定维度值(如 'Unassigned'),可在组合后过滤:
const unassignedPair = pairs.find(pair => pair[0] === 'Unassigned'); console.log(unassignedPair); // ['Unassigned', 64314]
或一步到位:
const unassigned = obj.rows
.find(row => row.dimensionValues?.[0]?.value === 'Unassigned');
if (unassigned) {
const value = [unassigned.dimensionValues[0].value, Number(unassigned.metricValues[0].value)];
console.log(value); // ['Unassigned', 64314]
}总结:核心在于理解 API 响应的嵌套结构——dimensionValues 和 metricValues 是数组,其元素是 { value: ... } 对象;合理使用索引、可选链与类型判断,即可稳定、高效地生成所需格式的二维数组。

















