Google Apps 脚本/URLFetchApp 并使用返回的数据

1 api urlfetch google-apps-script google-sheets-api

我对此很陌生,所以请耐心等待——我目前在从 Google 表单答案生成的 Google 表格后端有一个可操作的 Google Apps 脚本。我本质上是在 google 表单中设置一个票务表单,它将触发相应工作表中的数据通过 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());
  }
  }
Run Code Online (Sandbox Code Playgroud)

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

谢谢你!

dwm*_*rin 6

UrlFetchApp.fetch返回 a HTTPResponse,如果您期望 JSON,那么您应该能够仅使用JSON.parse()它从文本创建对象。(该JSON对象是标准 JavaScript 全局对象,例如Math;它不是 Google Apps 脚本特定的。)

如果一切顺利,您应该能够使用

var response = UrlFetchApp.fetch(url,options);
var data = JSON.parse(response.getContentText());
var id = data.id;
Run Code Online (Sandbox Code Playgroud)

然后将其用于id您的下一个fetch().

笔记

如果你的字面回应确实是

Aug 9, 2020, 11:44:40 AM Info    {"_url":"https://testticketingsystem.com/REST/2.0/ticket/123456","type":"ticket","id":"123456"}
Run Code Online (Sandbox Code Playgroud)

你会遇到麻烦,直到{JSON 无效(如果你需要检查自己,请使用linter )。但我假设它是在您记录 JSON 时由控制台添加的,而不是在实际响应本身中添加的。

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

您还可以在尝试之前检查标题JSON.parse()

这是一个检查并处理出现问题的示例。

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
Run Code Online (Sandbox Code Playgroud)