Google Apps Script解析嵌套JSON数组按分类写入表格问题
代码修改方案
你的代码核心问题是仅使用单层循环,用同一个索引i同时遍历「分类数组」和「分类下的比赛数组」,既会遗漏每个分类下除第i场之外的所有比赛,也会漏掉分类下其他赛事的全部比赛数据。
修改后的完整代码如下:
function parseJSONToSheet() { var destSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("jsonTest"); var response = UrlFetchApp.fetch("https://lsc.fn.sportradar.com/common/en/Europe:London/gismo/sport_matches/12/2021-07-03"); var dataRes = JSON.parse(response.getContentText()); var realCategories = dataRes.doc[0].data.sport.realcategories; var output = []; // 第一层:遍历所有分类 for (var c = 0; c < realCategories.length; c++) { var category = realCategories[c]; var tournaments = category.tournaments || []; // 第二层:遍历分类下的所有赛事 for (var t = 0; t < tournaments.length; t++) { var tournament = tournaments[t]; var matches = tournament.matches || []; // 第三层:遍历赛事下的所有比赛 for (var m = 0; m < matches.length; m++) { var match = matches[m]; var row = [ match._dt?.date || "", category.name || "", match.teams?.home?.name || "", match.teams?.away?.name || "", match.status?.name || "", match.result?.home || "", match.result?.away || "" ]; output.push(row); } } } // 写入工作表前先清空原有数据,避免旧数据残留 destSheet.getRange(2, 1, destSheet.getLastRow() - 1, 7).clearContent(); if (output.length > 0) { destSheet.getRange(2, 1, output.length, output[0].length).setValues(output); } }
核心修改点
- 新增两层嵌套循环,分别遍历分类下的所有赛事、赛事下的所有比赛,每层使用独立索引避免混用
- 增加空值兼容判断,遇到字段缺失的异常数据时不会导致脚本中断
- 写入前新增旧数据清空逻辑,避免之前的残留数据干扰输出结果
内容的提问来源于stack exchange,提问作者Zimox
相关产品推荐
相关产品推荐

