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
相关产品推荐
相关产品推荐

