使用AppScript将Facebook API中的每个操作展平为单独列
展平Facebook API响应中的Actions字段以适配报表需求
Facebook API返回的响应会将所有操作类型合并在actions字段中,这种嵌套结构不利于报表制作。需要将每个action_type拆分为独立列,对应填充其value值,实现结构展平。
API响应示例
"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" } ]
现有代码及问题
const sheet = SpreadsheetApp.getActiveSheet(); const headers = Object.keys(data[0]); var values = data.map(o => headers.map(h => o[h])); sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
现有代码执行后,actions字段仍以嵌套数组形式存在,控制台输出如下:
["actions", "spend", "date_start", "date_stop"] [[[{ action_type: "comment", value: "3" }, { action_type: "like", value: "33" }, { action_type: "link_click", value: "1531" }, { action_type: "mobile_app_install", value: "1049" }], "8621.03", "2017-10-28", "2017-11-26"]]
这种结果无法满足报表对扁平结构的需求,需修改代码实现actions字段的列展平。
修改后的代码实现
const sheet = SpreadsheetApp.getActiveSheet(); const data = /* 你的Facebook API响应data数组 */; // 1. 提取所有可能的action_type作为额外表头 const allActionTypes = [...new Set(data.flatMap(item => item.actions.map(action => action.action_type)))]; // 2. 定义基础表头(排除actions)和完整表头 const baseHeaders = Object.keys(data[0]).filter(key => key !== 'actions'); const fullHeaders = [...baseHeaders, ...allActionTypes]; // 3. 处理每条数据,展平actions字段 const flattenedValues = data.map(item => { // 将actions转换为{action_type: value}的对象 const actionObj = item.actions.reduce((acc, action) => { acc[action.action_type] = action.value; return acc; }, {}); // 按完整表头顺序生成值数组,没有的action类型填空 return fullHeaders.map(header => actionObj[header] || item[header] || ''); }); // 4. 写入表格(如果需要新增表头,先写入表头) // sheet.getRange(1, 1, 1, fullHeaders.length).setValues([fullHeaders]); sheet.getRange(sheet.getLastRow() + 1, 1, flattenedValues.length, flattenedValues[0].length).setValues(flattenedValues);
代码说明
- 遍历所有数据收集所有出现过的
action_type,确保不会遗漏任何操作类型 - 分离基础表头和操作类型表头,合并为完整的表头列表
- 把每条数据的
actions数组转换为键值对对象,再按完整表头顺序生成对应数值数组,缺失的操作类型填充空值 - 最后将扁平后的数据写入Google Sheet,若需要写入表头可取消注释对应代码
内容的提问来源于stack exchange,提问作者Arif Ahmed
相关产品推荐
相关产品推荐

