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

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;
  }
}

补充说明

  1. 如果API设计上应该返回单个父级对象而非数组,需要联系后端修正接口返回格式;
  2. 增加类型校验和空判断可以避免后续出现类似的崩溃问题;
  3. 你定义的ProdutoModel和FilhoModel本身没有问题,只需调整解析入口的逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:55:32