
本文介绍如何从 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 <blockquote><p>⚠️ 注意:使用可选链操作符 ?. 可避免因某行缺失 dimensionValues 或 metricValues 导致的 TypeError,提升鲁棒性。</p></blockquote><h3>? 扩展场景:单行含多个维度或指标</h3><p>若某行 dimensionValues 或 metricValues 包含多个值(例如多维分析返回 ['Source', 'Medium'] + [sessions, users]),需按位置一一配对。此时应基于<strong>较短数组长度</strong>进行循环,防止越界:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill2449" title="Javascript Sdk"><img
src="https://img.php.cn/upload/skill/000/000/081/178909576854323.jpg" alt="Javascript Sdk" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill2449" title="Javascript Sdk" class="overflowclass">Javascript Sdk</a>
<p class="overflowclass">用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。</p>
</div>
<a rel="nofollow" href="/xiazai/skill2449" title="Javascript Sdk" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><pre class="brush:php;toolbar:false;">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 <h3>? 进阶建议:函数式写法(推荐)</h3><p>使用 map() 和解构更简洁、声明式更强:</p><pre class="brush:php;toolbar:false;">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: ... } 对象;合理使用索引、可选链与类型判断,即可稳定、高效地生成所需格式的二维数组。










