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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:17:09