You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:57:00