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

从Google Sheet读取JSON调用API时格式错误问题求助

解决Google Apps Script从Sheet读取JSON作为API请求负载报400错误的问题

问题根源

当你将JSON.stringify()生成的字符串存入Google Sheet单元格后,Sheet可能会自动对字符串进行转义处理(比如给内部双引号添加反斜杠、或给整个字符串套额外的外层双引号),导致读取后的内容不再是有效的JSON结构:

  • 直接传入payload时,API收到的是被破坏的JSON格式
  • 再次执行JSON.stringify()会把整个字符串再包裹一层引号,变成嵌套的字符串,完全不符合API要求的格式

排查步骤

先确认读取到的内容是否存在格式问题:

ticketJson = work_sheet.getRange('B1').getValue();
Logger.log('读取内容的类型:' + typeof ticketJson);
Logger.log('读取到的原始内容:' + ticketJson);

查看日志,如果内容外层多了引号、内部引号被转义(比如"header_items"变成\"header_items\"),就是格式被破坏的直接证据。

解决方案

方案1:先解析再重新序列化(最可靠)

读取单元格内容后,先解析为JavaScript对象,再重新转成标准JSON字符串,修复Sheet引入的格式问题:

ticketJson = work_sheet.getRange('B1').getValue();
try {
  // 解析成对象,验证JSON有效性
  const parsedData = JSON.parse(ticketJson);
  // 重新生成标准JSON字符串
  const validPayload = JSON.stringify(parsedData);
  
  var params = {
      method:"POST",
      contentType:'application/json',
      headers:{Authorization:"Bearer "+token},
      payload: validPayload, 
      muteHttpExceptions:true
   };
  var post_ticket = UrlFetchApp.fetch("https://api.website.io", params);
  Logger.log(post_ticket);
} catch (e) {
  Logger.log('JSON格式错误:' + e.message);
  Logger.log('原始读取内容:' + ticketJson);
}

方案2:确保单元格存储的是纯JSON

存入单元格时,直接用代码写入JSON.stringify()的结果,避免手动编辑单元格引入错误:

// 正确的存入方式
var ticket_data = { "header_items": [{ "label": "Cliente", "type": "text", "item_id": "2cba1baf-207c-4529-ab72-7d35363983fc","responses": {"text": "PRUEBA: ANALISIS FALLA 2"},},],"template_id":"template_5f9b4f399fe342ce94fefada009ee467"};
work_sheet.getRange('B1').setValue(JSON.stringify(ticket_data));

不要手动在单元格里输入JSON内容,避免输入法或Sheet自动格式化导致的转义错误。

方案3:尝试用getDisplayValue()读取

如果getValue()返回的内容被Sheet自动处理过,试试用getDisplayValue()获取单元格显示的原始内容:

ticketJson = work_sheet.getRange('B1').getDisplayValue();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:35:30