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

Flutter解析嵌套JSON遇_CastError类型转换错误,求修复方案

修复方案

错误原因

你的datakomik.json根节点是对象({}),最外层包含一个名为data的数组字段,而非直接的数组结构。你直接将解码结果强转为List<dynamic>,必然触发类型转换错误。

步骤1:修正数据解析代码

修改_fetchData方法,先将解码结果转为Map,再提取其中的data数组:

Future<List<KomikCategory>> _fetchData() async {
  final jsondata = await rootBundle.loadString('assets/datakomik.json');
  
  // 先转成Map,再取出"data"对应的数组
  final Map<String, dynamic> jsonMap = json.decode(jsondata) as Map<String, dynamic>;
  final list = jsonMap['data'] as List<dynamic>;

  return list.map((e) => KomikCategory.fromJson(e)).toList();
}

步骤2:定义匹配嵌套结构的模型类

由于JSON是两层嵌套(分类 -> 漫画列表),需定义两个对应的数据模型:

// 分类模型:包含分类名称和该分类下的漫画列表
class KomikCategory {
  final String kategori;
  final List<KomikItem> data;

  KomikCategory({required this.kategori, required this.data});

  factory KomikCategory.fromJson(Map<String, dynamic> json) {
    // 解析分类下的漫画列表
    List<KomikItem> komikList = (json['data'] as List)
        .map((item) => KomikItem.fromJson(item))
        .toList();
    
    return KomikCategory(
      kategori: json['kategori'],
      data: komikList,
    );
  }
}

// 单部漫画模型:对应每个漫画的基础信息
class KomikItem {
  final String judul;
  final String image;

  KomikItem({required this.judul, required this.image});

  factory KomikItem.fromJson(Map<String, dynamic> json) {
    return KomikItem(
      judul: json['judul'],
      image: json['image'],
    );
  }
}

步骤3:更新状态变量类型

将原状态变量替换为匹配的模型类型:

List<KomikCategory>? kategoriList;

完成以上修改后,即可正确解析嵌套JSON数据,不会再出现类型转换错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:24:51