Google Sheets doPost脚本解析数组格式JSON POST报错问题求助
问题根因
你的参数读取失败和报错是两个基础逻辑错误导致的:
- 未解析的
e.postData.contents是JSON字符串类型,直接取索引[0]只会拿到字符串第一个字符[,无法读取内部字段 JSON.parse(e.postData.contents)返回的是数组,必须先取数组第一个元素,才能访问到目标对象内的payload等字段
正确可运行实现代码
function doPost(e) { try { // 读取原始POST请求内容 const rawPostContent = e.postData.contents; // 解析JSON得到数组 const parsedDataArr = JSON.parse(rawPostContent); // 取数组第一个元素为目标业务对象 const businessData = parsedDataArr[0]; // 按需读取各层级参数示例 const referenceId = businessData.payload.reference_id; const unitId = businessData.payload.unit_id; const originCity = businessData.payload.origin.city; const destinationCountry = businessData.payload.destination.country; const dataStatus = businessData.status; // 构造响应结果,可根据业务需求修改 const response = { status: "success", fetchedData: { referenceId, unitId, originCity, destinationCountry, dataStatus } }; // 返回JSON格式响应 return ContentService.createTextOutput(JSON.stringify(response)) .setMimeType(ContentService.MimeType.JSON); } catch (error) { // 错误捕获,方便定位问题 const errorResponse = { status: "fail", errorMsg: error.toString() }; return ContentService.createTextOutput(JSON.stringify(errorResponse)) .setMimeType(ContentService.MimeType.JSON); } }
注意事项
- 你之前打印
JSON.parse的结果显示[object Object]属于正常现象,不是解析失败,Apps Script中直接输出对象会显示该标识,按层级访问属性即可拿到对应值,调试时可以用Logger.log打印属性值到执行日志查看 - 部署Web App时,权限必须设置为「任何人,甚至匿名用户」才能接收外部POST请求
- 每次修改代码后必须重新部署新版本,旧版本部署不会同步更新代码
- 你示例的JSON存在尾部多余逗号问题,部分客户端传参时如果带该格式错误会导致JSON解析失败,需保证传入的JSON格式合法
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

