Google AppScript API部署后返回空JSON对象问题求助
问题分析与解决方案
核心错误1:错误使用数组存储对象属性
你的代码里let row = [];创建了数组,但后续用对象键值对方式(row['name'])赋值。JavaScript中数组的JSON序列化仅处理数字索引元素,字符串键属性不会被序列化,最终每个row都会被转为空数组,这就是你收到[[],[],...]的原因。
核心错误2:行索引需确认匹配表格结构
Google Sheets的getDataRange().getValues()返回的数组索引0对应表格第一行。如果表头在第一行、数据从第二行开始,循环应从i=1而非i=2启动——你本地运行正常说明数据确实从第三行开始,但部署后若表格结构变动,也可能导致无数据返回,需自行核对。
修复后的代码
function doGet() { let doc = SpreadsheetApp.getActiveSpreadsheet(); let sheet = doc.getSheetByName('portfolios'); if (!sheet) { // 新增工作表存在校验,避免无意义报错 return ContentService.createTextOutput(JSON.stringify({error: "Sheet 'portfolios' not found"})).setMimeType(ContentService.MimeType.JSON); } let values = sheet.getDataRange().getValues(); let output = []; // 确认数据起始行:若表头在第1行(values[0]),数据从第2行(values[1])开始则修改i=1 for (let i = 2; i < values.length; i++) { let row = {}; // 改为对象存储键值对,而非数组 row['name'] = values[i][0]; row['committee'] = values[i][1]; row['post'] = values[i][2]; output.push(row); } return ContentService.createTextOutput(JSON.stringify(output)).setMimeType(ContentService.MimeType.JSON); }
额外验证步骤
- 重新部署Web App:确保选择**“执行为:我”,“谁可以访问:任何人,甚至匿名”**,复制新部署URL测试。
- 确认脚本绑定表格:部署后的Web App使用脚本绑定的表格,若为独立脚本,需用
SpreadsheetApp.openById("表格ID")指定目标表格,而非getActiveSpreadsheet()。
内容的提问来源于stack exchange,提问作者Himanshu Sardana
相关产品推荐
相关产品推荐

