Google Apps Script调用Sheets API遇JSON截断解析错误求助
解决Google Sheets API返回大JSON被截断的问题
当通过Google Sheets API获取数十万条数据时,单次请求返回的JSON体积超过API响应大小限制(约50MB)就会被截断,导致JSON.parse()报错。针对你的需求(获取响应中values字段的值),可以用以下几种方案解决:
方案1:分批分页请求数据
将大表格拆分成多个小范围的请求,循环获取所有数据后合并:
function fetchSheetDataInBatches(spreadsheetId, range) { const sheet = SpreadsheetApp.openById(spreadsheetId).getRange(range).getSheet(); const totalRows = sheet.getLastRow(); const batchSize = 1000; // 可根据数据情况调整批次大小 let allValues = []; for (let startRow = 1; startRow <= totalRows; startRow += batchSize) { const endRow = Math.min(startRow + batchSize - 1, totalRows); const batchRange = `${sheet.getName()}!A${startRow}:Z${endRow}`; // 按需修改列范围 const response = Sheets.Spreadsheets.Values.get(spreadsheetId, batchRange); if (response.values) { allValues = allValues.concat(response.values); } } return allValues; }
方案2:使用Apps Script内置Spreadsheet服务替代API
内置服务直接操作表格,没有API的响应大小限制,获取数据更高效:
function fetchAllValuesDirectly(spreadsheetId, range) { const sheetRange = SpreadsheetApp.openById(spreadsheetId).getRange(range); return sheetRange.getValues(); }
这个方法无需调用外部API,直接返回二维数组形式的values数据,完全满足你的需求。
方案3:只请求需要的字段(减少响应体积)
如果必须使用Sheets API,通过fields参数指定只返回values字段,大幅缩小响应JSON的体积:
function fetchValuesOnly(spreadsheetId, range) { const response = Sheets.Spreadsheets.Values.get(spreadsheetId, range, { fields: 'values' }); return response.values || []; }
这种方式避免了返回API默认包含的冗余字段,降低触发响应截断的概率。
问题根源说明
Google Sheets API对单个响应的大小有默认上限(约50MB),当你的数据量过大时,返回的JSON字符串超过这个限制就会被服务器截断,导致JSON格式不完整,进而触发SyntaxError: Unterminated string错误。
内容的提问来源于stack exchange,提问作者naspy971
相关产品推荐
相关产品推荐

