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

Dart/Flutter调用API获取数据报_TypeError类型不匹配如何修复?

问题成因

该报错属于Dart类型不匹配异常,触发原因如下:

  • 你当前调用的API返回的响应体为{}包裹的JSON对象结构,而非你代码预期的[]包裹的JSON数组结构
  • json.decode解析JSON对象后返回的实际运行时类型为_InternalLinkedHashMap<String, dynamic>,你直接将该Map类型的值赋值给声明为List类型的jsonResponse变量,违反了Dart的强类型校验规则,因此抛出异常。
修复方案

根据接口实际返回结构分为两种处理场景:

场景1:JSON对象的指定字段存储目标Data数组

如果接口返回结构类似下方示例,数组嵌套在对象的某个字段中:

{
  "code": 200,
  "msg": "请求成功",
  "data": [
    // 此处为你需要的Data列表内容
  ]
}

将代码调整为如下形式即可:

Future<List<Data>> fetchData() async {
  final response = await http.get(
    Uri.parse('link'),
    headers: headers);
  if (response.statusCode == 200) {
    // 先将解析结果转为Map类型
    Map<String, dynamic> jsonResponse = json.decode(response.body);
    // 取出存储数组的字段,替换为你接口实际的数组字段名即可
    List<dynamic> dataList = jsonResponse['data'];
    return dataList.map((data) => Data.fromJson(data)).toList();
  } else {
    throw Exception('Unexpected error occured!');
  }
}

场景2:接口返回的是单个Data对象,不存在数组

如果接口本身就只返回单条Data数据,没有数组结构,需要修改方法返回类型和解析逻辑:

Future<Data> fetchData() async {
  final response = await http.get(
    Uri.parse('link'),
    headers: headers);
  if (response.statusCode == 200) {
    Map<String, dynamic> jsonResponse = json.decode(response.body);
    return Data.fromJson(jsonResponse);
  } else {
    throw Exception('Unexpected error occured!');
  }
}

内容的提问来源于stack exchange,提问作者doğan kısa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:42:02