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

Flutter JSON解析报错:List<dynamic>不是Map<String,dynamic>类型的子类型

问题修复方案

错误原因

你后端Spring接口返回的JSON结构是用户数组(外层为[]包裹的列表),json.decode(jsonString)执行后得到的是List<dynamic>类型数据,而你调用的Users.fromJson方法要求入参是Map<String, dynamic>类型,类型不匹配就触发了该报错。

修复步骤

  1. 调整getUsers方法的返回值类型,从返回单个Users对象改为返回List<Users>列表
  2. 直接调用实体类中已经生成好的列表解析方法usersFromJson完成解析
  3. 修正变量作用域问题,你原代码中try块内重新定义了局部userModel变量,导致外层变量始终为null

修复后的代码

Future<List<Users>> getUsers() async{
  var client = http.Client();
  List<Users> userModel = [];
  try {
    var response = await client.get(Uri.parse(Strings.users_url));
    if (response.statusCode == 200) {
      var jsonString = response.body;
      // 直接调用自带的列表解析方法
      userModel = usersFromJson(jsonString);
      print(userModel);
    }
  } catch(e) {
    print(e);
    return userModel;
  }
  return userModel;
}

特殊场景说明

如果你确实只需要获取单个用户对象,可以选择两种方案:

  • 调整后端Spring接口,改为返回单个用户对象而非列表
  • 解析时取列表的第一个元素:
if (response.statusCode == 200) {
  var jsonString = response.body;
  var jsonList = json.decode(jsonString) as List;
  if(jsonList.isNotEmpty){
    userModel = Users.fromJson(jsonList[0]);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:08