我在Sheets中撰寫了一個腳本,該腳本應該對JSON帖子進行扁平化處理,但我在處理傳入的JSON格式方面遇到了一些困難。
下面,我有一個試圖決議的 POST 示例。下面是我的 doPost 函式,以及我嘗試獲取內容的一些方法。doPost 使用另一個函式來實際決議內容,但我似乎無法解決看起來像陣列格式的 JSON 的問題。
下面是一個POST物件的例子:
[
{
"id"。"xyz123"。
"payload": {
"reference_id": "id_6",
"unit_id": "000111222",
"origin": {
"name": "T-shirt Supply",
"城市": "九江",
"state": "江西"。
"國家": "中國"。
},
"目的地": {
"name": "主辦公室"。
"城市": " Surabaya",
"州": "東爪哇"。
"國家": "印度尼西亞"。
},
},
"status": "data_received",
"created_at": "2020-01-29T07:41:33.918Z",
"uped_at": "2020-01-29T07:41:33.918Z"
}
]
我已經嘗試用幾種方法來訪問內容,例如payload.reference_id,但由于某些原因,我無法找到進入JSON物件的卷曲括號的方法。以下是我嘗試過的一些方法:
function doPost(e){
var data = e.postData.contents。
//回傳JSON格式的[{ "id": "xyz", "payload" : {"reference" : "1", "uped" : true}}]
var data2 = JSON.parse(e.postData.contents) 。
//回傳[object Object]。
var data3 = data[0] 。
//回傳 []
var data4 = ContentService.createTextOutput(e.postData. contents).setMimeType(ContentService.MimeType.JSON) 。
//與'data'的結果相同。
return dataX;
}
我還嘗試了各種變通方法,如兩次決議、stringify等。非常感謝任何幫助!
uj5u.com熱心網友回復:
我認為你不需要決議e.postData.contents,可能它已經是一個物件,不是字串。
或者,如果它是字串,并且只有一個元素,你可以試試這樣做:
var data2 = JSON.parse(e. postData.contents.slice(1,-1) )。)
uj5u.com熱心網友回復:
我相信你的目標如下。
你的目標是什么?
- 你想輸出陣列中第一個元素的物件,這是你從
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腳本時,請將部署修改為新版本。這樣,修改后的腳本就會反映在Web Apps中。請注意這一點。
- 你可以在"重新部署Web Apps而不改變新IDE的Web Apps的URL"的報告中看到這方面的細節。
參考資料:
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/330550.html
標籤:
