Flutter解析JSON列表报错:List不是Map<String,dynamic>子类型
问题根源
异常type 'List' is not a subtype of type 'Map<String, dynamic>'的核心原因是:你调用的API返回的是一个数组(List),但你的代码把它当成了单个对象(Map<String, dynamic>)来解析。
你的ProdutoModel.fromJson方法要求传入一个Map,但jsonDecode(response.body)得到的是List类型,直接传入就会触发类型不匹配错误。
解决方案
调整解析逻辑,先从返回的List中取出目标父级对象,再传入模型解析:
修改后的请求代码
Future<ProdutoModel> getProduto() async { try { final response = await http.get(Uri.parse( "https://api.maisdecristo.com/api/parents/mdcget00_parentkids/48984974812")); var res = jsonDecode(response.body); // 校验返回数据格式,确保是 non-empty List if (res is List && res.isNotEmpty) { // 从List中取出第一个元素(假设API返回的列表仅包含一个父级数据) final parentMap = res[0] as Map<String, dynamic>; _accountListModel = ProdutoModel.fromJson(parentMap); // 解析子列表 final kidsData = parentMap['filhos'] as List; setState(() { _list = kidsData.map<FilhoModel>((json) => FilhoModel.fromJson(json)).toList(); }); return _accountListModel; } else { throw Exception("API返回数据为空或格式不符合预期"); } } catch (e) { rethrow; } }
补充说明
- 如果API设计上应该返回单个父级对象而非数组,需要联系后端修正接口返回格式;
- 增加类型校验和空判断可以避免后续出现类似的崩溃问题;
- 你定义的
ProdutoModel和FilhoModel本身没有问题,只需调整解析入口的逻辑即可。
内容的提问来源于stack exchange,提问作者Bruno Santos
相关产品推荐
相关产品推荐

