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
相关产品推荐
相关产品推荐

