【发布时间】:2021-07-16 01:20:33
【问题描述】:
我有一个返回大型 JSON 的请求:
function fetchDataFromApi(request, params) {
var url = 'https://someurl/get-records?' +
'school=someSchool&' +
'year=';
var yearToday = parseInt(new Date().getFullYear());
var requests = [];
for (var i = 2011; i < yearToday; i++)
{
requests.push(url + i);
}
return JSON.parse(UrlFetchApp.fetchAll(requests).map(function(e) { return e.getContentText()}));
}
我已按年对它进行切片,这样 UrlFetchApp 就不必处理 50MB 的 blob 限制。但是它会引发错误:
Exception details: InternalError: Array length 53673928 exceeds supported capacity limit.
但是当我尝试访问响应的每个元素时,例如
JSON.parse(UrlFetchApp.fetchAll(requests)[0].getContentText()
...效果很好。
您知道导致问题的原因吗?
我也尝试将所有响应分成单独的请求。
var responses = []
for (var i = 2011; i < yearToday; i++)
{
var request = url + i;
responses.push(UrlFetchApp.fetch(request).getContentText());
}
var json = JSON.parse([].concat.apply([], responses));
return json;
但在 Google Data Studio 中会抛出此错误:
Array length 68522537 exceeds supported capacity limit.
【问题讨论】:
-
您是否尝试将每个响应设置为不同的数组?你对回应做了什么?例如,如果您将响应设置到电子表格中,您可以每次都这样做,并在再次调用之前删除响应。
-
我也试过了,除了“删除响应”部分。它有什么区别?我需要将所有响应加载到 Data Studio。
标签: javascript google-apps-script google-data-studio urlfetch