如何通过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
相关产品推荐
相关产品推荐

