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

Apps Script调用阿尔伯塔油价API遇字段名空格问题:数据读取失败

解决API返回字段名带空格导致数据拉取为空的问题

你的问题核心是API返回的字段名是"Type "(末尾带空格),而你用点语法obs.Type访问时,JavaScript会寻找名为Type(无空格)的属性,自然取不到值,导致对应位置为空。

直接解决方案

使用方括号语法访问带空格的属性名,把循环里的obs.Type替换成obs["Type "]即可:

observations.forEach(function(obs) { 
  recentData.push([obs.Date, obs["Type "], obs.Value]);  
});

修改后的完整脚本

function fetchOilPrices() { 
  var sheetName = 'Oil Prices';
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 补充缺失的spreadsheet变量定义
  
  // 检查目标工作表是否存在
  var existingSheet = spreadsheet.getSheetByName(sheetName); 
  var newSheet;
  if (!existingSheet) { 
    // 不存在则新建工作表
    newSheet = spreadsheet.insertSheet(sheetName); 
  } else { 
    // 存在则直接使用
    newSheet = existingSheet; 
  } 
    
  var url = "https://api.economicdata.alberta.ca/api/data?code=0d593867-2089-4514-8901-9e2d7f666e0c"; 
  var options = {
      "method": "get",
  }; 
       
  var response = UrlFetchApp.fetch(url, options); 
  var data = JSON.parse(response.getContentText()); 
    
  // 假设返回数据是数组格式
  var observations = data; 
  var recentData = [["Date", "Type", "Value"]]; // 工作表表头
    
  // 遍历数据提取字段(已修复属性访问问题)
  observations.forEach(function(obs) { 
    recentData.push([obs.Date, obs["Type "], obs.Value]);  
  }); 
  
  // 反转数据顺序(排除表头)
  recentData = [recentData[0]].concat(recentData.slice(1).reverse()); 
  
  // 清空工作表内容
  newSheet.clearContents(); 
  Logger.log(sheetName + " cleared.") 
  
  // 将数据写入工作表
  newSheet.getRange(1, 1, recentData.length, 3).setValues(recentData); 
  Logger.log("Written data for " + observations.length + " observations.");
}

额外优化建议(可选)

如果担心API返回的其他字段也存在首尾空格问题,可以统一清理所有对象的属性名:

// 清理对象属性名首尾空格的工具函数
function cleanObjectKeys(obj) {
  return Object.fromEntries(
    Object.entries(obj).map(([key, value]) => [key.trim(), value])
  );
}

// 在解析数据后使用该函数处理
var data = JSON.parse(response.getContentText());
var observations = data.map(cleanObjectKeys);

// 之后就可以直接用obs.Type访问,无需考虑空格
observations.forEach(function(obs) { 
  recentData.push([obs.Date, obs.Type, obs.Value]);  
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:52:51