Apps Script解压.gz文件出现意外输出问题求助
问题分析与解决方案
你的核心问题是没有使用解压后的Blob对象获取字符串:调用Utilities.ungzip(placeholderBlob)会返回一个新的、已解压的Blob,但你没有将这个结果保存,反而继续用原始的压缩Blob(placeholderBlob)调用getDataAsString(),自然输出的是未解压的原始二进制数据。
修正后的代码
function getData() { var analyticsUrl = `https://slack.com/api/admin.analytics.getFile?type=member&date=2023-12-30`; var analyticsOptions = { 'method': 'GET', 'headers': { 'accept-encoding': 'gzip', 'Authorization': 'Bearer REDACTED' } }; var response = UrlFetchApp.fetch(analyticsUrl, analyticsOptions); Logger.log(response.getAllHeaders()); // 无需手动设置Content-Type,response.getBlob()会自动继承响应头的类型 var compressedBlob = response.getBlob(); Logger.log(compressedBlob); // 保存解压后的Blob var unzippedBlob = Utilities.ungzip(compressedBlob); Logger.log(unzippedBlob); // 使用解压后的Blob获取字符串 var jsonContent = unzippedBlob.getDataAsString(); Logger.log(jsonContent); }
额外注意事项
- 移除多余的ContentType设置:
response.getBlob()会自动识别响应头的Content-Type: application/gzip,手动设置application/x-gzip属于冗余操作,可直接删除。 - 日志截断问题:
Logging output too large是因为解压后的JSON内容体积过大,Logger对输出长度有限制,这属于正常现象,不影响你后续对jsonContent的处理(比如解析成JSON对象)。 - 验证解压结果:如果担心解压失败,可以通过
unzippedBlob.getContentType()确认是否为application/json,确保解压流程正常。
内容的提问来源于stack exchange,提问作者Judah Hooper
相关产品推荐
相关产品推荐

