How to take data in google sheet script via POST request in JSON format?

六月ゝ 毕业季﹏ 提交于 2019-12-26 12:34:09

问题


This question is about receiving POST request from somewhere. I'm looking for a google sheet script function that can take and handle data from the POST request in JSON format. Could you suggest any example?

The POST request is here:

https://script.google.com/macros/s/BOdirjv45Dn6FHrx_4GUguuS6NJxnSEeviMHm3HerJl4UsDBnDgfFPO/

{
  "p1": "writeTitle",
  "p2": [[URL]],
  "p3": [[PIC_A]],
  "p4": [[PIC_B]],
  "p5": [[TITLE]]
}

application/json

doPost() doesn't work:

doPost(e) {
var json = JSON.parse(e.postData.contents);
Logger.log(json);
}

回答1:


  • You want to retrieve the value from the request body as an object.
  • You have already deployed Web Apps.

If my understanding of your situation is correct, how about this modification?

Post and retrieved object:

As a sample, I used the following curl command to POST to Web Apps.

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"

When above command is run, e of doPost(e) is as follows.

{
  "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"
  }
}

The posted payload can be retrieved by e.postData. From above response, it is found that the value you want can be retrieved by e.postData.contents. By the way, when the query parameter and the payload are given like as follows,

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 can be retrieved by e.parameter or e.parameters. And the payload can be retrieved by e.postData.contents.

Modified script:

In this modified script, the result can be seen at the Stackdriver, and also the result is returned.

function doPost(e) {
  var json = JSON.parse(e.postData.contents);
  console.log(json);
  return ContentService.createTextOutput(JSON.stringify(json));
}

Note:

  • When you modified your script of Web Apps, please redeploy it as new version. By this, the latest script is reflected to Web Apps. This is an important point.

Reference:

  • Web Apps
  • Stackdriver Logging

If this was not what you want, I'm sorry.



来源:https://stackoverflow.com/questions/53008348/how-to-take-data-in-google-sheet-script-via-post-request-in-json-format

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!