我正在 Google Drive 电子表格的脚本中从 JIRA 获取 JSON 数据。我有一个脚本可以很好地获取数据,而且我几乎只获取该问题的数据。我返回的是 JSON 文本字段,表示有关特定 JIRA 问题的所有数据。
我不想每次需要特定 JIRA 问题中的一个字段时都调用 UrlFetch 服务,而是希望在第一次获取后缓存获取的 JSON 数据。
遗憾的是,Google 针对 Google Apps 脚本的缓存服务仅缓存字符串格式的数据,并将字符串限制为 200 个字符。从 JIRA 返回的 JSON 文本数据远远超过 200 个字符。
是否有其他方法可以缓存 javascript 对象(例如解析的 JSON 字符串)或在 Google Apps 脚本中缓存 200 多个字符?
这是我在意识到数据存储为字符串之前尝试缓存数据的代码:
function _fetchJiraData(targetIssue) {
Logger.log("Started fetching JIRA data for '%s'", targetIssue);
var data = cache.get(targetIssue);
if (data == null) {
var options = {
headers : {
Authorization : "Basic " + Utilities.base64Encode('user:password')
}
};
var url = Utilities.formatString(
'https://rentrak.atlassian.net/rest/api/latest/issue/%s',
targetIssue
);
var result = UrlFetchApp.fetch(url, options);
var jsonText = result.getContentText();
data = JSON.parse(jsonText);
cache.put(targetIssue, data);
}
// TODO: validate data
return data;
};
谢谢你的帮助!
应用程序脚本缓存服务 https://developers.google.com/apps-script/reference/cache/最多可以缓存每个密钥 100KB https://developers.google.com/apps-script/reference/cache/cache#put(String,String),您不应该遇到只有“200”个字符的问题。更严格的限制仅针对密钥,即 250 个字符。
我在您的代码中看到的主要问题是您试图缓存解析的数据,而不是文本。除非你的密钥那么大(在这种情况下我建议你使用 enconding 代替),否则这应该有效:
function _fetchJiraData(targetIssue) {
var jsonText = cache.get(targetIssue);
if (jsonText === null) {
//...prepare your fetch
var result = UrlFetchApp.fetch(url, options);
jsonText = result.getContentText();
cache.put(targetIssue, jsonText);
}
var data = JSON.parse(jsonText);
return data;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)