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

如何展平Facebook广告API嵌套数组 适配Data Studio连接器开发

Facebook广告API Campaign数据拍平实现方案(适配Google Apps Script/Data Studio)

需求说明

  • 适配Google Data Studio连接器开发场景,处理Facebook广告API返回的JSON格式广告系列数据
  • 原始数据结构:每个campaign对象包含campaign_name、cpm、spend、impressions等顶层基础字段,同时嵌套actions数组;数组内每个元素为键值对结构,存储action_type和对应的转化value
  • 转换目标:将actions数组内的每一组转化类型映射为campaign对象的顶层平级字段,action_type作为字段名,对应value作为字段值,与原有基础字段保持同级,满足GDS的字段读取规则

核心实现

标准ES6+写法(支持新版GAS运行时)

使用reduce的正确逻辑:先拷贝所有原有基础字段作为reduce的初始值,再遍历actions数组逐个挂载转化字段,全程不修改原始API返回数据,避免副作用。

/**
 * 单条campaign数据拍平处理
 * @param {Object} rawCampaign Facebook API返回的原始campaign对象
 * @returns {Object} 平级结构的campaign对象
 */
function flattenCampaignActions(rawCampaign) {
  // 提取actions数组,剩余字段为基础属性,做空值兜底
  const { actions = [], ...baseFields } = rawCampaign;
  // 遍历actions数组,将转化字段挂载到基础属性对象上
  return actions.reduce((result, action) => {
    // 跳过字段缺失的异常数据
    if (action?.action_type && action.value !== undefined) {
      result[action.action_type] = action.value;
    }
    return result;
  }, { ...baseFields }); // 初始值传入拷贝后的基础字段,保证原有属性不丢失
}

老 runtime 兼容写法(无ES6+语法依赖)

如果使用的GAS运行时不支持解构、扩展运算符、可选链等特性,可使用全ES5兼容写法:

function flattenCampaignActions(rawCampaign) {
  var result = {};
  var key;
  // 先拷贝所有非actions的基础字段
  for (key in rawCampaign) {
    if (rawCampaign.hasOwnProperty(key) && key !== 'actions') {
      result[key] = rawCampaign[key];
    }
  }
  // 兜底处理无actions字段的情况
  var actions = rawCampaign.actions || [];
  var i, actionItem;
  for (i = 0; i < actions.length; i++) {
    actionItem = actions[i];
    if (actionItem.action_type && actionItem.value !== undefined) {
      result[actionItem.action_type] = actionItem.value;
    }
  }
  return result;
}

批量处理逻辑

针对API返回的整页campaign列表,可直接通过map批量转换:

function processCampaignList(apiResponse) {
  var rawList = apiResponse.data || [];
  return rawList.map(flattenCampaignActions);
}

常见reduce写法错误说明

之前实现不符合预期通常是以下问题导致:

  • 未给reduce传入初始值,导致第一次迭代的累加器为actions数组的第一个元素,直接丢失所有campaign基础字段
  • 迭代时直接修改原始campaign对象,产生数据污染,影响后续其他逻辑处理
  • 未做空值兜底,当某条campaign无actions字段时直接抛出遍历错误
  • 未做异常字段判断,遇到action_type/value缺失的脏数据时导致字段映射异常

转换效果示例

原始输入结构:

const rawData = {
  campaign_name: "618大促投放",
  cpm: 15.2,
  spend: 3280.5,
  clicks: 4120,
  actions: [
    {action_type: "link_click", value: 3980},
    {action_type: "add_to_cart", value: 562},
    {action_type: "purchase", value: 113},
    {action_type: "lead_form_submit", value: 189}
  ]
}

转换后输出结构(完全平级,可直接供GDS识别为字段):

{
  campaign_name: "618大促投放",
  cpm: 15.2,
  spend: 3280.5,
  clicks: 4120,
  link_click: 3980,
  add_to_cart: 562,
  purchase: 113,
  lead_form_submit: 189
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:21:43