从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
相关产品推荐
相关产品推荐

