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

Flutter中解析含不定数量季的复杂JSON响应问题

Flutter解析动态Key的JSON剧集字段问题解决办法

问题描述

在Flutter中加载并解析服务器返回的JSON时,自定义Model对大部分字段都能正常解析,但处理episodes字段时遇到了问题。该字段的结构如下:

"episodes": {
  "1": [
    {
      "id": "63",
      "episode_num": 1,
      "title": "Some Name",
      "container_extension": "mp4",
      "info": {
        "director": "",
        "plot": "",
        "cast": "",
        "rating": "",
        "releasedate": "",
        "movie_image": "",
        "genre": "",
        "duration_secs": 6495,
        "duration": "01:48:15"
      }
    }
  ]
}

这里的episodes下是动态的数字Key(代表季数),实际返回中季数数量不定。在线JSON转Dart工具只能识别单季结构,无法适配多季的动态场景。

解决方法

可以通过两种方式处理这种动态Key的JSON结构:

方法1:遍历所有季的Key

直接获取episodes对应的Map对象,遍历每个季的Key和对应的剧集列表,这种方式适配所有季数情况(包括非连续季数):

// 假设已将JSON解析为Map<String, dynamic>类型的jsonData
Map<String, dynamic> episodesMap = jsonData['episodes'];

episodesMap.forEach((seasonKey, episodesList) {
  // seasonKey是字符串类型的季数,比如"1"、"2"
  // 将剧集列表转换为自定义Episode Model列表
  List<Episode> seasonEpisodes = episodesList
      .map((episodeJson) => Episode.fromJson(episodeJson))
      .toList();
  
  // 在这里处理当前季的剧集数据,比如存入列表或展示
});

方法2:按连续季数循环(适用于季数从1开始连续的情况)

如果确定季数是从1开始的连续数字,可以通过循环季数来获取每一季的内容:

Map<String, dynamic> episodesMap = jsonData['episodes'];
int totalSeasons = episodesMap.length;

for (int i = 1; i <= totalSeasons; i++) {
  // 将数字i转为字符串作为Key
  List<dynamic> seasonEpisodesJson = episodesMap['$i'];
  List<Episode> seasonEpisodes = seasonEpisodesJson
      .map((episodeJson) => Episode.fromJson(episodeJson))
      .toList();
  
  // 处理当前季数据
}

注:如果季数存在断档(比如有第1、3季但无第2季),优先使用方法1,避免出现Key不存在的报错。

内容的提问来源于stack exchange,提问作者SpaceXS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:35:33