如何在Apps Script中遍历Snapchat API返回的JSON响应
优化Snapchat API数据导入Google Sheets的代码
你当前的代码通过逐个单元格赋值的方式导入数据,不仅冗余,还无法适配API返回的广告组数量变化。下面是优化后的代码,用循环遍历数据并批量写入,实现动态行数适配:
function readData() { const accessToken = "TOKEN"; const sheet = SpreadsheetApp.getActiveSheet(); const adsetUrl = "https://adsapi.snapchat.com/v1/campaigns/e431cbcd-2281-49fe-8d05-b26c87660eb5/adsquads"; // 发起API请求 const response = UrlFetchApp.fetch(adsetUrl, { headers: { "Authorization": "Bearer " + accessToken } }); const adsetData = JSON.parse(response.getContentText()); // 确保adsquads数组存在,避免空数据报错 const adSquads = adsetData.adsquads || []; // 收集所有广告组名称到二维数组(Google Sheets要求传入二维数组批量写入) const adSquadNames = adSquads.map(squad => [squad.adsquad.name]); // 清空原有数据范围(可选,根据需求决定是否保留历史数据) const existingRange = sheet.getRange(3, 3, sheet.getLastRow() - 2, 1); existingRange.clearContent(); // 动态写入数据:从C3开始,行数等于广告组数量,列数1 if (adSquadNames.length > 0) { const targetRange = sheet.getRange(3, 3, adSquadNames.length, 1); targetRange.setValues(adSquadNames); } }
关键改进点:
- 循环遍历+批量写入:用
map遍历adsquads数组收集数据,再通过setValues一次性写入,比逐个setValue效率提升显著(Google Apps Script中批量操作能减少服务调用次数) - 动态适配行数:通过
adSquadNames.length获取返回结果的数量,动态计算写入范围,不管API返回多少条数据都能适配 - 容错处理:添加
adsetData.adsquads || []避免API返回空数据时出现数组未定义的报错 - 灵活的数据处理:如果需要追加数据而非覆盖,可将写入起始行调整为
sheet.getLastRow() + 1,去掉清空历史数据的代码即可
内容的提问来源于stack exchange,提问作者Karim
相关产品推荐
相关产品推荐

