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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:24:01