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

如何通过Google Apps Script在Google Sheets中导入JSON子字段及优化字段管理

Google Apps Script 优化:API JSON数据提取与字段复用

问题1:提取weightTierInformation数组下的gramAmount字段

由于weightTierInformation是数组结构,需根据业务需求选择提取方式:

  • 仅提取第一个层级的重量值:使用可选链运算符?.避免数组为空时报错,语法为item.weightTierInformation[0]?.gramAmount
  • 提取所有层级的重量值并转为字符串:通过map遍历数组提取所有gramAmount,再用join拼接成逗号分隔的字符串,语法为item.weightTierInformation.map(tier => tier.gramAmount).join(', ')

问题2:字段名复用优化

将需要提取的字段统一存入配置变量,后续新增/修改字段只需调整该变量,无需修改数据映射逻辑:

  • 定义fieldMappings数组,每个元素包含字段键名和可选的自定义提取逻辑(用于处理嵌套字段)
  • 遍历该数组生成表格数据,彻底避免重复编写字段名

优化后的完整代码

function import_inventory_test(e) {
  // 请求配置
  const options = {
    method: "GET",
    headers: {
      'Content-Type': 'application/json',
      'Prefer': 'code=200, dynamic=true', // 合并重复的Prefer请求头
      "clientId": "1",
      "key": "1"
    }
  };

  // 获取并解析API响应
  const response = UrlFetchApp.fetch("https://stoplight.io/mocks/flowhub/public-developer-portal/24055485/v0/inventory?max=100", options);
  const json = JSON.parse(response.getContentText());

  // 字段映射配置:统一管理需提取的字段
  const fieldMappings = [
    { key: 'sku' },
    { key: 'quantity' },
    { key: 'productName' },
    { key: 'brand' },
    // 提取第一个weightTier的gramAmount,为空时返回空字符串
    { 
      key: 'gramAmount', 
      extract: (item) => item.weightTierInformation[0]?.gramAmount || '' 
    },
    // 可选:提取所有gramAmount并转为逗号分隔字符串
    // { 
    //   key: 'allGramAmounts', 
    //   extract: (item) => item.weightTierInformation.map(tier => tier.gramAmount).join(', ') || '' 
    // }
  ];

  // 根据字段映射生成表格数据
  const values = json.data.map(item => {
    return fieldMappings.map(field => {
      // 有自定义提取逻辑则执行,否则直接取字段值
      return field.extract ? field.extract(item) : (item[field.key] || '');
    });
  });

  // 写入Google Sheets
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  if (values.length > 0) {
    sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
  }
}

代码关键优化点

  • 合并了重复的Prefer请求头(原代码重复定义会导致覆盖,合并后符合HTTP规范)
  • 用fieldMappings实现字段集中管理,降低维护成本
  • 通过可选链?.和空值处理,避免字段不存在或数组为空时的报错
  • 统一处理空值,确保写入Sheet时不会出现undefined

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:32:21