如何通过 POST 请求以 JSON 格式获取 google sheet 脚本中的数据?
How to take data in google sheet script via POST request in JSON format?
这个问题是关于从某处接收 POST 请求的。我正在寻找一个 google sheet 脚本函数,它可以以 JSON 格式获取和处理来自 POST 请求的数据。你能举个例子吗?
POST 请求在这里:
https://script.google.com/macros/s/BOdirjv45Dn6FHrx_4GUguuS6NJxnSEeviMHm3HerJl4UsDBnDgfFPO/
{
"p1": "writeTitle",
"p2": [[URL]],
"p3": [[PIC_A]],
"p4": [[PIC_B]],
"p5": [[TITLE]]
}
application/json
doPost()
无效:
doPost(e) {
var json = JSON.parse(e.postData.contents);
Logger.log(json);
}
- 您想从请求正文中检索值作为对象。
- 您已经部署了 Web 应用程序。
如果我对你的情况的理解是正确的,这个修改怎么样?
Post 并检索到对象:
作为示例,我使用以下 curl 命令 POST 到 Web 应用程序。
curl -L \
-H 'Content-Type:application/json' \
-d '{"p1": "writeTitle","p2": "[[URL]]","p3": "[[PIC_A]]","p4": "[[PIC_B]]","p5": "[[TITLE]]"}' \
"https://script.google.com/macros/s/#####/exec"
当上述命令为运行时,doPost(e)
的e
如下
{
"parameter": {},
"contextPath": "",
"contentLength": 90,
"queryString": "",
"parameters": {},
"postData": {
"type": "application/json",
"length": 90,
"contents": "{\"p1\": \"writeTitle\",\"p2\": \"[[URL]]\",\"p3\": \"[[PIC_A]]\",\"p4\": \"[[PIC_B]]\",\"p5\": \"[[TITLE]]\"}",
"name": "postData"
}
}
可以通过 e.postData
检索发布的负载。从上面的响应中发现,你想要的值可以通过e.postData.contents
来获取。顺便说一句,当查询参数和有效负载如下所示时,
curl -L \
-H 'Content-Type:application/json' \
-d '{"p1": "writeTitle","p2": "[[URL]]","p3": "[[PIC_A]]","p4": "[[PIC_B]]","p5": "[[TITLE]]"}' \
"https://script.google.com/macros/s/#####/exec?key=value"
value
可以通过e.parameter
或e.parameters
检索。有效负载可以通过 e.postData.contents
.
检索
修改后的脚本:
这个修改后的脚本,在Stackdriver可以看到结果,也返回了结果。
function doPost(e) {
var json = JSON.parse(e.postData.contents);
console.log(json);
return ContentService.createTextOutput(JSON.stringify(json));
}
注:
- 当您修改了Web Apps 的脚本时,请将其重新部署为新版本。由此,最新的脚本被反映到Web Apps。这一点很重要。
参考:
如果这不是你想要的,我很抱歉。
这个问题是关于从某处接收 POST 请求的。我正在寻找一个 google sheet 脚本函数,它可以以 JSON 格式获取和处理来自 POST 请求的数据。你能举个例子吗?
POST 请求在这里:
https://script.google.com/macros/s/BOdirjv45Dn6FHrx_4GUguuS6NJxnSEeviMHm3HerJl4UsDBnDgfFPO/
{
"p1": "writeTitle",
"p2": [[URL]],
"p3": [[PIC_A]],
"p4": [[PIC_B]],
"p5": [[TITLE]]
}
application/json
doPost()
无效:
doPost(e) {
var json = JSON.parse(e.postData.contents);
Logger.log(json);
}
- 您想从请求正文中检索值作为对象。
- 您已经部署了 Web 应用程序。
如果我对你的情况的理解是正确的,这个修改怎么样?
Post 并检索到对象:
作为示例,我使用以下 curl 命令 POST 到 Web 应用程序。
curl -L \
-H 'Content-Type:application/json' \
-d '{"p1": "writeTitle","p2": "[[URL]]","p3": "[[PIC_A]]","p4": "[[PIC_B]]","p5": "[[TITLE]]"}' \
"https://script.google.com/macros/s/#####/exec"
当上述命令为运行时,doPost(e)
的e
如下
{
"parameter": {},
"contextPath": "",
"contentLength": 90,
"queryString": "",
"parameters": {},
"postData": {
"type": "application/json",
"length": 90,
"contents": "{\"p1\": \"writeTitle\",\"p2\": \"[[URL]]\",\"p3\": \"[[PIC_A]]\",\"p4\": \"[[PIC_B]]\",\"p5\": \"[[TITLE]]\"}",
"name": "postData"
}
}
可以通过 e.postData
检索发布的负载。从上面的响应中发现,你想要的值可以通过e.postData.contents
来获取。顺便说一句,当查询参数和有效负载如下所示时,
curl -L \
-H 'Content-Type:application/json' \
-d '{"p1": "writeTitle","p2": "[[URL]]","p3": "[[PIC_A]]","p4": "[[PIC_B]]","p5": "[[TITLE]]"}' \
"https://script.google.com/macros/s/#####/exec?key=value"
value
可以通过e.parameter
或e.parameters
检索。有效负载可以通过 e.postData.contents
.
修改后的脚本:
这个修改后的脚本,在Stackdriver可以看到结果,也返回了结果。
function doPost(e) {
var json = JSON.parse(e.postData.contents);
console.log(json);
return ContentService.createTextOutput(JSON.stringify(json));
}
注:
- 当您修改了Web Apps 的脚本时,请将其重新部署为新版本。由此,最新的脚本被反映到Web Apps。这一点很重要。
参考:
如果这不是你想要的,我很抱歉。