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

Google Apps Script中JSON解析报错及返回空值问题求助

问题解决:Google Apps Script请求Investing.com接口报错

错误根源

  • 重复调用JSON.parse,且res.getContentText未加括号(正确写法是res.getContentText()),导致解析对象错误
  • 未设置请求头,网站返回非JSON内容(如HTML页面),触发SyntaxError
  • 假设返回数据是数组,但实际可能是嵌套对象结构,直接调用map会失败

修正代码

function json_data() {
  const url = "https://in.investing.com/economic-calendar/historical-data-table?eventId=201";
  
  // 模拟浏览器请求头,获取合法JSON响应
  const options = {
    muteHttpExceptions: true,
    headers: {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
      "Accept": "application/json, text/javascript, */*; q=0.01"
    }
  };

  const res = UrlFetchApp.fetch(url, options);
  const content = res.getContentText();

  try {
    const data = JSON.parse(content);
    // 根据实际返回结构调整:如果是数组直接map,否则取对应数组字段
    const targetData = Array.isArray(data) ? data : data.data; // 示例,需根据实际返回调整
    const result = targetData.map(post => [post.release_date, post.actual]);
    return result;
  } catch (e) {
    console.log("错误信息:", e.message);
    console.log("响应内容:", content); // 打印响应方便排查
    return [];
  }
}

核心要点

  • 请求头必须设置:Investing.com会验证请求来源,添加User-Agent和Accept才能拿到JSON格式响应
  • 避免重复解析:仅调用一次JSON.parse,确保传入的是响应文本而非方法引用
  • 错误捕获机制:用try-catch包裹解析逻辑,便于排查非预期响应内容
  • 适配数据结构:先判断返回数据类型,再执行map操作,避免因结构不匹配报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:25:24