【发布时间】:2021-09-18 00:35:00
【问题描述】:
我在 Sheets 中有一个脚本,应该将 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"
}
]
我尝试了几种访问内容的方法,例如 payload.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;
}
我还尝试了各种解决方法,例如解析两次、字符串化等。非常感谢任何帮助!!!
【问题讨论】:
-
可以查看请求内容类型吗?应该是
postData.type。如果您要发送请求(而不是 webhook),请尝试将其设置为application/json -
您好阿布拉,感谢您的回复。 postData.type 设置为 application/json
-
您可以为 data2 尝试以下操作:
Object.keys(data2)?这应该会显示对象上的所有键,并让您更好地理解结构。 -
你能分享更多关于脚本的信息以及如何重现它吗?或者如果可能的话,分享项目的公共副本?
标签: javascript json google-apps-script google-sheets google-sheets-api