如何在Google Apps Script Web应用中提取JSON对象?

px9o7tmv  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(161)

有人能解释一下为什么这个功能不起作用吗?

function doPost(e) {
        var contents = JSON.parse(e.postData.contents);
        var data = JSON.stringify(contents,null,4);
        var x = data["inboundSMSMessageList"];
        var y= x.inboundSMSMessage[0].senderAddress;
        GmailApp.sendEmail("sample.email@gmail.com", "test5", y); 
        }

它需要一个事件侦听器e,解析其内容,然后分别使用JSON.parse()和JSON.stringify()对内容进行严格的解析。这是一个字符串化数据的示例:

var data = {
    "inboundSMSMessageList": {
        "inboundSMSMessage": [
            {
                "dateTime": "Sun Jan 03 2021 01:25:03 GMT+0000 (UTC)",
                "destinationAddress": "tel:21585789",
                "messageId": "5ff11cef73cf74588ab2a735",
                "message": "Yes",
                "resourceURL": null,
                "senderAddress": "tel:+63917xxxxx"
            }
        ],
        "numberOfMessagesInThisBatch": 1,
        "resourceURL": null,
        "totalNumberOfPendingMessages": 0
    }
}

脚本似乎在倒数第二行失败(var y);但是当我在示例数据上运行它时,我能够访问Im目标的键和值对-这是发送方地址(它发送“tel:+63917xxxxx:我的电子邮件)。有人知道为什么当它作为一个Web应用程序运行时会失败吗?

olhwl3o2

olhwl3o21#

我认为在您的脚本中,var contents = JSON.parse(e.postData.contents);可以用作解析对象。我认为你的错误的原因是由于对象被var data = JSON.stringify(contents,null,4)转换为字符串。那么下面的修改怎么样呢?

发件人:

var contents = JSON.parse(e.postData.contents);
var data = JSON.stringify(contents,null,4);

收件人:

var data = JSON.parse(e.postData.contents);
  • 在本变形例中,ytel:+63917xxxxx

注意:

  • 当您修改Web Apps的脚本时,请将Web Apps重新部署为新版本。这样,最新的脚本被反映到Web应用程序。请小心这个。
z4bn682m

z4bn682m2#

在解析json请求之前使用模板文字。
const body = JSON.parse(${e.postData.contents})
e.postData.contents返回一个json,没有字符串封装在整个json请求上。它将返回类似于{"sheetName":"TEST"}的东西,当你尝试解析它时,它将返回一个Uncaught SyntaxError: "[object Object]" is not valid JSON,而当你不使用字符串 Package 的时候。

相关问题