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

Flutter解析JSON报错:期望FutureOr<List<dynamic>>却得到_JsonMap类型

报错根因

你声明的getData()方法返回值类型为Future<List>,但调用的接口返回的JSON根结构是对象而非数组,json.decode(response.body)解析后得到的是_JsonMap(即Dart的Map类型),和声明的返回类型不匹配,因此抛出类型校验异常。

修复步骤
  1. 先确认接口返回的JSON结构
    在解析后加一行打印,确认你需要的列表数据在返回对象中的对应字段名:
var decodedRes = json.decode(response.body);
print(decodedRes); // 打印完整返回结构,找到列表对应的key,通常为data、list、records等
  1. 调整代码适配返回结构
    假设你需要的列表存储在返回对象的data字段中,代码修改如下:
Future<List<dynamic>> getData() async {
    final prefs = await SharedPreferences.getInstance();
    final key = 'token';
    final value = prefs.get(key) ?? 0;

    String myUrl = "$serverUrl/userchecks";
    http.Response response = await http.get(Uri.parse(myUrl), headers: {
      'Accept': 'application/json',
      'Authorization': 'Bearer $value'
    });

    print('Response status : ${response.statusCode}');
    Map<String, dynamic> resMap = json.decode(response.body);
    // 把['data']替换为你实际的列表字段名即可
    return resMap['data'] as List;
}

如果你本身不需要返回列表,只是返回类型声明错误,直接调整方法的返回类型即可:

Future<Map<String, dynamic>> getData() async {
    // 原有逻辑保持不变
    return json.decode(response.body) as Map<String, dynamic>;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:18:03