如何将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); } }
使用步骤:
- 打开你的Google Sheet,点击顶部菜单栏的「扩展应用」→「Apps Script」
- 删除默认的
myFunction代码,粘贴上面的脚本 - 把
apiUrl替换成你的实际接口链接 - 点击保存按钮(给脚本起个名字,比如
JSONImporter) - 点击运行按钮,第一次运行会要求授权,按照提示完成授权即可
- 回到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
相关产品推荐
相关产品推荐

