我在表格中有一个脚本,应该是扁平化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 ()