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
相关产品推荐
相关产品推荐

