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

如何将JSON接口数据导入Google Sheets并按列展示?

解决Google Sheets导入JSON接口数据的问题

看起来你遇到的核心问题是没正确定位JSON里的嵌套数据结构,以及现有IMPORTJSON函数对数组的处理不符合你的需求。我来一步步帮你解决:

为什么你的第一个脚本返回undefined?

你的JSON数据里,name并不是顶层属性——它是嵌套在data数组的每个对象里的。你原来的脚本直接写var name = json["name"],相当于在JSON的最外层找name字段,当然会返回undefined。

方案1:自定义脚本直接导入到Sheet(最直接高效)

这个脚本会帮你把data数组里的所有对象,按name、domain、id、slug四列写入当前Sheet:

function fetchAndImport() {
  // 替换成你的API链接
  const apiUrl = 'https://theAPILINK.json';
  try {
    // 获取并解析JSON数据
    const response = UrlFetchApp.fetch(apiUrl);
    const jsonData = JSON.parse(response.getContentText());
    
    // 取出data数组,如果为空就提示
    const dataList = jsonData.data;
    if (!dataList || dataList.length === 0) {
      Logger.log("接口返回空数据");
      return;
    }
    
    // 准备表头和要写入的数据行
    const headers = ["name", "domain", "id", "slug"];
    const rows = dataList.map(item => [
      item.name,
      item.domain,
      item.id,
      item.slug
    ]);
    
    // 获取当前活跃的Sheet,清空原有内容(可选,可根据需求删除这行)
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.clearContents();
    
    // 写入表头和数据
    sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
    sheet.getRange(2, 1, rows.length, rows[0].length).setValues(rows);
    
    Logger.log("数据导入成功,共导入" + rows.length + "条数据");
  } catch (error) {
    Logger.log("导入失败:" + error.message);
  }
}

使用步骤:

  1. 打开你的Google Sheet,点击顶部菜单栏的「扩展应用」→「Apps Script」
  2. 删除默认的myFunction代码,粘贴上面的脚本
  3. 把apiUrl替换成你的实际接口链接
  4. 点击保存按钮(给脚本起个名字,比如JSONImporter)
  5. 点击运行按钮,第一次运行会要求授权,按照提示完成授权即可
  6. 回到Sheet,你会看到数据已经按四列整齐显示了

方案2:修改现有IMPORTJSON函数适配数组数据

你找到的IMPORTJSON函数在处理数组时,会把数组索引作为键返回,这就是为什么你用=IMPORTJSON("url","data")看到0、1、2这些值。如果想继续用这个函数,可以修改它的数组处理逻辑,让它直接返回对象的字段:

修改原函数中else if(typeof(json) === "object")这部分的代码:

else if(typeof(json) === "object"){
  // 如果是数组,提取每个对象的指定字段(这里用你需要的四个字段)
  if(Array.isArray(json)){
    const headers = ["name", "domain", "id", "slug"];
    const tempArr = [headers];
    json.forEach(item => {
      tempArr.push([item.name, item.domain, item.id, item.slug]);
    });
    return tempArr;
  }
  // 非数组的对象仍按原逻辑处理
  var tempArr = [];
  for(var obj in json){
    tempArr.push([obj,json[obj]]);
  }
  return tempArr;
}

修改后,再用=IMPORTJSON("https://theAPILINK.json","data")就能直接得到带表头的四列数据了。

为什么你用IMPORTJSON传"name"会返回"Node Not Available"?

因为name不是JSON顶层的节点,它是data数组里每个对象的子属性。原函数的xpath逻辑是逐层查找,你传"name"相当于在JSON最外层找这个字段,自然找不到,所以返回错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:26:01