无法检索JSON post的内容



我在表格中有一个脚本,应该是扁平化JSON帖子,但我有一些困难绕过传入JSON的格式。

下面,我有一个示例POST,我试图解析。下面是我的doPost函数,使用了一些我尝试过的获取内容的方法。doPost使用另一个函数来实际解析内容,但我似乎无法绕过看起来像数组格式的JSON。

下面是一个POST对象的例子:
[
{
"id": "xyz123",
"payload": {
"reference_id": "id_6",
"unit_id": "000111222",
"origin": {
"name": "T-shirt Supply",
"city": "Jiujiang",
"state": "Jiangxi",
"country": "China",
},
"destination": {
"name": "Main Office",
"city": "Surabaya",
"state": "East Java",
"country": "Indonesia",
},
},
"status": "data_received",
"created_at": "2020-01-29T07:41:33.918Z",
"updated_at": "2020-01-29T07:41:33.918Z"
}
]

我尝试了几种方法来访问内容,例如有效负载。reference_id,但由于某种原因,我无法进入JSON对象的尖括号。以下是我尝试过的一些方法:

function doPost(e){
var data = e.postData.contents;
// returns JSON formatted [{ "id": "xyz", "payload" : {"reference" : "1", "updated" : true}}]
var data2 = JSON.parse(e.postData.contents);
// returns [object Object]

var data3 = data[0];
// returns [

var data4 = ContentService.createTextOutput(e.postData.contents).setMimeType(ContentService.MimeType.JSON);
// same result as 'data'

return dataX;
}

我还尝试了各种解决方法,例如解析两次、stringify等等。任何帮助都非常感谢!!

我认为你不需要解析e.p postdata。内容,可能已经是一个对象,而不是字符串。

或者如果它是字符串并且只有一个元素,你可以试试:

var data2 = JSON.parse(e.postData.contents.slice(1,-1));

我相信你的目标是这样的。

  • 你想输出数组中第一个元素的对象,这是你从doPost的样本值。

如果我的理解是正确的,那么下面的修改如何?

修改脚本:

function doPost(e){
var data2 = JSON.parse(e.postData.contents);
return ContentService.createTextOutput(JSON.stringify(data2[0])).setMimeType(ContentService.MimeType.JSON);
}
  • 在这个修改中,它假设e.postData.contents是您的样本值。请小心。
  • 当使用上面修改过的脚本时,返回数组的第一个元素。

注意:

  • 当您修改Google Apps Script时,请将部署修改为新版本。这样,修改后的脚本就会反映在Web应用程序中。请小心。
  • 你可以在"重新部署Web应用程序而不更改Web应用程序的URL为新的id"的报告中看到这一点的细节。
  • 参考:

  • createTextOutput ()

最新更新