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

解析对象数组至Google表格时,如何展开affiliations数组?

解决Google表格解析对象数组时展开affiliations子字段的问题

核心思路

针对affiliations是数组嵌套对象的结构,我们需要手动提取其内部的子字段(如city/city_id/country),将其作为独立列与其他字段合并,再写入表格。以下是具体实现方案:

修改后的代码示例

function parseDataToSheet() {
  // 替换为你的测试数据
  const testData = [
    {
      "id": "1",
      "name": "Einarr",
      "affiliations": [
        {
          "city": "Oslo",
          "city_id": "NO-03",
          "country": "Norway"
        }
      ],
      "corresponding": true,
      "email": "einarr@example.com"
    },
    {
      "id": "2",
      "name": "Anna",
      "affiliations": [
        {
          "city": "Stockholm",
          "city_id": "SE-01",
          "country": "Sweden"
        }
      ],
      "corresponding": false,
      "email": "anna@example.com"
    }
  ];

  // 1. 生成完整表头:基础字段 + 带前缀的affiliations子字段
  const baseHeaders = Object.keys(testData[0]).filter(key => key !== 'affiliations');
  const affiliationSubHeaders = Object.keys(testData[0].affiliations[0]).map(subKey => `affiliation_${subKey}`);
  const allHeaders = [...baseHeaders, ...affiliationSubHeaders];

  // 2. 处理每行数据,展开affiliations子字段
  const rows = testData.map(item => {
    // 提取基础字段值
    const baseValues = baseHeaders.map(header => item[header]);
    // 提取第一个关联机构的子字段值(若有多个机构可调整为循环生成多行)
    const targetAffiliation = item.affiliations[0] || {};
    const affiliationValues = affiliationSubHeaders.map(subHeader => {
      const subKey = subHeader.replace('affiliation_', '');
      return targetAffiliation[subKey] || '';
    });
    // 合并所有字段值
    return [...baseValues, ...affiliationValues];
  });

  // 3. 写入Google表格
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.clear(); // 可选:清空原有内容
  sheet.getRange(1, 1, 1, allHeaders.length).setValues([allHeaders]);
  sheet.getRange(2, 1, rows.length, rows[0].length).setValues(rows);
}

关键逻辑说明

  • 表头处理:过滤掉原数据中的affiliations字段,为其子字段添加affiliation_前缀(避免与其他字段重名),合并成最终表头。
  • 数据展开:对每个数据项,先提取基础字段值,再取出affiliations数组的第一个对象(若需支持多机构,可修改为遍历数组生成多行数据,基础字段会重复显示),提取子字段值后与基础值合并。
  • 表格写入:先写入表头,再批量写入处理后的数据行,保证格式对齐。

多关联机构场景适配

如果一个对象有多个affiliations条目,需要每个机构单独占一行,可将数据处理部分修改为:

const rows = [];
testData.forEach(item => {
  const baseValues = baseHeaders.map(header => item[header]);
  // 遍历每个关联机构,生成独立行
  item.affiliations.forEach(affiliation => {
    const affiliationValues = affiliationSubHeaders.map(subHeader => {
      const subKey = subHeader.replace('affiliation_', '');
      return affiliation[subKey] || '';
    });
    rows.push([...baseValues, ...affiliationValues]);
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:13:23