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

Google Apps Script中UrlFetchApp调用API无法解析JSON的问题求助

Google Apps Script调用Magic Eden API无法解析JSON的解决方案

我在编写Google Apps Script脚本测试API调用时遇到问题,代码如下:

function floorGrab(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var helpSheet = ss.getSheetByName("Helper");
  var urls = helpSheet.getRange("aa2:aa").getDisplayValues();
  console.log(urls[0]);
  var options = {
    muteHttpExceptions: true,
  }
  var rawData = UrlFetchApp.fetch(urls[0], options);
  console.log(rawData);
  var data = JSON.parse(rawData);
  console.log(data);
}

使用的API地址是https://api-mainnet.magiceden.io/sft/markets/4YjkU4KrCnWhQ7DhMNLkUqeJjdhgK2xZYYmt5MgNfPYq?name=Pipelia-Wing,直接访问该地址能正常获取JSON,但脚本调用时返回的是一个包含多个方法的对象:

{ toString: [Function],
getResponseCode: [Function],
getContent: [Function],
getAllHeaders: [Function],
getHeaders: [Function],
getContentText: [Function],
getBlob: [Function],
getAs: [Function] }

尝试过添加Origin头、序列化请求数据、指定JSON格式等配置,结果都一样,无法用JSON.parse解析。


问题原因与解决方法

问题核心是UrlFetchApp.fetch()返回的是HTTPResponse对象,不是直接的JSON字符串。必须调用该对象的getContentText()方法获取响应文本内容,才能进行JSON解析。

修正后的代码:

function floorGrab(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var helpSheet = ss.getSheetByName("Helper");
  // 过滤空行,获取有效URL
  var urls = helpSheet.getRange("aa2:aa").getDisplayValues().filter(row => row[0] !== "");
  if(urls.length === 0) {
    console.log("未找到有效URL");
    return;
  }
  var targetUrl = urls[0][0];
  console.log(targetUrl);
  
  var options = {
    muteHttpExceptions: true,
    headers: {
      "Accept": "application/json" // 明确指定接受JSON格式,增强兼容性
    }
  }
  
  var response = UrlFetchApp.fetch(targetUrl, options);
  // 获取响应文本内容
  var rawData = response.getContentText();
  console.log(rawData);
  
  try {
    var data = JSON.parse(rawData);
    console.log(data);
  } catch(e) {
    console.error("JSON解析失败:", e.toString());
    // 排查错误:输出响应状态码
    console.log("响应状态码:", response.getResponseCode());
  }
}

关键说明

  • UrlFetchApp.fetch()返回的response是HTTPResponse实例,必须通过getContentText()提取字符串内容才能解析
  • 增加URL过滤逻辑,避免空行导致的无效请求
  • 添加Accept请求头,让API明确返回JSON格式(部分API会根据该头调整响应内容)
  • 用try-catch包裹解析逻辑,方便定位解析失败的具体原因

内容的提问来源于stack exchange,提问作者Brian - RGY Studio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:27:24