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

使用JavaScript实现动态数组扁平化并适配Google Sheets数据导入

动态提取API数据字段并导入Google Sheets

需求说明

需要将API返回的对象键提取为表头数组、值提取为数据行数组,用于导入Google Sheets;同时实现动态适配,当API返回新增字段时,无需修改代码即可自动映射表头与对应值。

API响应示例

// API响应示例
var data = [
  {
    "actions": [             
      {
        "action_type": "comment",
        "value": "3"
      },
      {
        "action_type": "like",
        "value": "33"
      },
      {
        "action_type": "link_click",
        "value": "1531"
      },
      {
        "action_type": "mobile_app_install",
        "value": "1049"
      }
    ],
    "spend": "8621.03",
    "date_start": "2017-10-28",
    "date_stop": "2017-11-26"
    // 若API新增字段,比如"campaign_id": "12345",代码需自动处理
  }
];

现有代码的问题

现有代码通过硬编码指定顶层字段(spend/date_start/date_stop),无法自动识别API新增的顶层字段;同时仅取第一个扁平化对象的键作为表头,若不同数据项存在不同的action_type,会导致部分表头丢失。

动态解决方案代码

function importToGoogleSheets() {
  const sheet = SpreadsheetApp.getActiveSheet();
  // 假设data为API返回的原始数据数组
  var data = [/* API响应数据 */];

  // 1. 扁平化每个数据项:合并顶层字段与actions中的键值对
  const flattenedData = data.map(item => {
    // 复制所有顶层字段(动态适配新增字段)
    const flattened = { ...item };
    // 删除原始actions字段,避免保留冗余数据
    delete flattened.actions;
    // 将actions中的每个action_type转为独立字段
    item.actions.forEach(action => {
      flattened[action.action_type] = action.value;
    });
    return flattened;
  });

  // 2. 收集所有唯一表头:遍历所有扁平化对象,确保不遗漏任何字段
  const allHeaders = [...new Set(flattenedData.flatMap(item => Object.keys(item)))];

  // 3. 生成对应表头顺序的数据行,缺失字段填充空字符串
  const dataRows = flattenedData.map(item => {
    return allHeaders.map(header => item[header] || '');
  });

  // 4. 写入Google Sheets
  const nextRow = sheet.getLastRow() + 1;
  // 写入表头
  sheet.getRange(nextRow, 1, 1, allHeaders.length).setValues([allHeaders]);
  // 写入数据行
  sheet.getRange(nextRow + 1, 1, dataRows.length, dataRows[0].length).setValues(dataRows);
}

代码关键改进点

  • 动态扁平化数据:使用{ ...item }复制所有顶层字段,无需硬编码,API新增字段会自动被包含;同时将actions中的每个action_type转为独立字段。
  • 全量收集表头:通过遍历所有扁平化对象的键并去重,确保所有可能的字段(包括新增字段、不同数据项的不同action_type)都被作为表头。
  • 适配缺失字段:生成数据行时,若某个字段在数据项中不存在,自动填充空字符串,避免导入时出现数据错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:51:40