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

Flutter类型转换报错咨询:_InternalLinkedHashMap无法转为List

解决Dart/Flutter中类型转换异常:_InternalLinkedHashMap<String, dynamic> is not a subtype of type List

兄弟,这个异常的原因其实特别直白——你把服务器返回的单个JSON对象当成了JSON数组来处理!

咱们拆解下问题:

  • 你的代码里,调用json.decode(response.body)后,直接用data[0].name去取值,这说明你默认认为data是一个数组(List),可以通过索引下标访问元素。
  • 但实际上,服务器返回的是一个单个的JSON对象(也就是Map结构),json.decode解析后得到的是_InternalLinkedHashMap<String, dynamic>类型,这时候你用数组索引[0]去访问,自然会触发类型不匹配的异常。

怎么验证和解决呢?

  • 先确认服务器返回的真实结构:在json.decode之前加一行print(response.body);,看看控制台输出的到底是{"name": "xxx", ...}这种单个对象,还是[{"name": "xxx"}, ...]这种数组。
  • 如果确实是单个对象,修改代码里的访问方式:把print(data[0].name);改成print(data['name']);,用键值对的方式访问Map里的字段,同时要确保data的类型定义是Map<String, dynamic>而不是List。
  • 如果按照业务逻辑,服务器应该返回数组,那大概率是后端接口的问题,需要和后端同事确认接口返回格式是否符合预期。

修改后的示例代码:

Future<String> login() async {
  var response = await http.get(
    Uri.encodeFull("https://etrans.herokuapp.com/test/2"),
    headers: {"Accept": "application/json"}
  );
  // 先打印确认返回的JSON结构
  print(response.body);
  this.setState(() {
    data = json.decode(response.body); // 此时data是Map类型
  });
  print(data['name']); // 用键名访问对应值
  return "Success!";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:41:41