Flutter解析JSON报错:期望FutureOr<List<dynamic>>却得到_JsonMap类型
报错根因
你声明的getData()方法返回值类型为Future<List>,但调用的接口返回的JSON根结构是对象而非数组,json.decode(response.body)解析后得到的是_JsonMap(即Dart的Map类型),和声明的返回类型不匹配,因此抛出类型校验异常。
修复步骤
- 先确认接口返回的JSON结构
在解析后加一行打印,确认你需要的列表数据在返回对象中的对应字段名:
var decodedRes = json.decode(response.body); print(decodedRes); // 打印完整返回结构,找到列表对应的key,通常为data、list、records等
- 调整代码适配返回结构
假设你需要的列表存储在返回对象的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
相关产品推荐
相关产品推荐

