我在Google云端硬盘中的电子表格脚本中从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;
};
感谢您的帮助!
答案 0 :(得分:3)
应用脚本Cache Service最多可以缓存100KB per key,您不应该只遇到“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;
}