Flutter请求REST API报错:_InternalLinkedHashMap不是List<dynamic>子类型
Flutter API数据加载类型不匹配问题修复
报错原因
- 核心问题是接口返回的JSON根结构为对象(
Map<String, dynamic>类型),但代码中直接将json.decode的结果赋值给List类型变量,类型强制转换失败触发报错。 - 你所调用的测试接口返回的JSON并不是直接以数组作为根结构,而是外层包裹了一层对象,实际需要的业务列表存储在该对象的某个属性下。
修复步骤
- 首先确认接口返回的完整JSON结构,找到存储业务列表的属性名,通用结构参考如下:
{ "code": 200, "msg": "success", "data": [ {"empno":1, "ename":"张三", "sal":10000}, {"empno":2, "ename":"李四", "sal":12000} ] }
上述示例中列表存放在data属性中。
2. 修改fetchData方法的解析逻辑,先解析根对象再取出列表属性:
Future <List<Data>> fetchData() async { final response = await http.get(Uri.https('json-generator.com', 'api/json/get/cqwVqdOFrC?indent=2')); if (response.statusCode == 200) { // 解析根结构为Map final Map<String, dynamic> rootMap = json.decode(response.body); // 替换为你接口实际存放列表的属性名 final List listData = rootMap['data']; return listData.map((item) => Data.fromJson(item)).toList(); } else { throw Exception('Error!'); } }
额外注意
如果不确定接口返回的结构,可以在解析前添加print(response.body)打印返回内容,确认列表对应的属性名后再修改代码即可。
内容的提问来源于stack exchange,提问作者user_odoo
相关产品推荐
相关产品推荐

