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

更新http库后JSON转换报错:List<dynamic>无法转为String

解决JSON解析类型不匹配错误:type 'List' is not a subtype of type 'String'

错误原因

你的代码存在明确的类型不匹配问题:

  • getRates方法中,jsonDecode(response.body)已将响应体字符串解析为List<dynamic>类型对象
  • 但你将这个对象传给了要求接收String类型参数的allRates方法,直接触发类型转换报错

修复方案

方案一:修改allRates适配已解析的JSON数据(推荐)

既然getRates已经完成JSON解析,allRates无需再接收字符串重复解析,直接处理解析后的List<dynamic>即可:

List<Ratemodel> allRates(List<dynamic> jsonData) {
  return List<Ratemodel>.from(jsonData.map((x) => Ratemodel.fromJson(x)));
}

getRates中的调用保持不变:

return allRates(jsonDecode(response.body));

方案二:调整getRates的调用逻辑

如果不想修改allRates的参数定义,直接将未解析的响应体原始字符串传给它:

Future<List<Ratemodel>> getRates(String id) async {
  final response = await http.get(Uri.parse(ApiConstants.baseUrl + ApiConstants.rate + id));
  if (response.statusCode == 200) {
    return allRates(response.body); // 直接传递原始字符串,不提前解析
  } else {
    throw Exception('Failed to load album');
  }
}

说明

方案一更高效,避免了重复执行JSON解析操作,也更符合职责划分:getRates负责网络请求与初步解析,allRates专注于模型转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:45:05