Google 应用 Script/URLFetchApp 并使用返回的数据

Google Apps Script/URLFetchApp and using returned data

我对此很陌生,所以请耐心等待——我目前在生成的 google sheet 后端有一个可操作的 google 应用程序脚本来自 Google 表格答案。我实质上是在 google 表单中设置一个票证表格,它将触发相应 sheet 中的数据通过 api 调用发送到我们的票务系统。它工作得很好,但我目前正在尝试优化它。目标是获取我使用的 json 响应:

Logger.log(response.getContentText());

它为我提供了以下信息:

Aug 9, 2020, 11:44:40 AM Info {"_url":"https://testticketingsystem.com/REST/2.0/ticket/123456","type":"ticket","id":"123456"}

并发送另一个 API 调用以将数据发送到该新工单。

这是一个代码片段:

var payload = { 
    "Subject":  String(su),
    "Content":  String(as),
    "Requestor": String(em),
    "Queue": String(qu),
    "CustomFields": {"CustomField1": String(vn), "CustomField2": String(vb), "CustomField3": 
     String(vg), "CustomField4": String(av), "CustomField5": String(ov), "CustomField6": 
     String(sd)}
     }

var options = {
      'method': 'post',
      "contentType" : "application/json",
      'payload': JSON.stringify(payload),
      'muteHttpExceptions': true
       }

var url = "https://testticketingsystem.com/REST/2.0/ticket?token=****************";

var response = UrlFetchApp.fetch(url,options);

Logger.log(response.getContentText());
  
  } catch (error) {
    Logger.log(error.toString());
  }
  }

创建工单后,如何编写将该 ID 号作为变量使用到下一个 api 调用中的脚本?

谢谢!

UrlFetchApp.fetch returns a HTTPResponse, and if you expect JSON then you should be able to just use JSON.parse() 从文本创建 object。 (JSON object 是标准的 JavaScript 全局 object,类似于 Math;它不是 Google Apps 脚本特定的。)

如果一切顺利,你应该可以使用

var response = UrlFetchApp.fetch(url,options);
var data = JSON.parse(response.getContentText());
var id = data.id;

然后将 id 用于下一个 fetch()

备注

如果你的字面反应确实是

Aug 9, 2020, 11:44:40 AM Info    {"_url":"https://testticketingsystem.com/REST/2.0/ticket/123456","type":"ticket","id":"123456"}

您将 运行 陷入麻烦,因为直到 { 无效 JSON(如果您需要检查自己,请使用 linter)。但我假设这是在您登录时由控制台添加的 JSON,而不是实际响应本身。

JSON.parse() 会抛出 JSON 无效的错误,因此您可以根据需要使用 try/catch

您也可以在尝试 JSON.parse() 之前检查 headers。

这里有一个检查和处理问题的例子。

var type = response.getHeaders()["Content-Type"];
var text = response.getContentText();
if (type === "application/json") {
  try {
    var data = JSON.parse(text);
  } catch (error) {
    return Logger.log("Invalid JSON: " + response.getContentText(text));
  }
} else {
  return Logger.log("expected JSON, but got response of type: " + type);
}
// if we get to this line, data is an object we can use