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

Dart调用json.decode解析assets本地JSON文件卡住无响应问题求助

故障原因
  • 类型不匹配是核心问题:你提供的madrid.json根节点是{}包裹的JSON对象,对应Dart运行时的Map<String, dynamic>类型,但你的代码使用as List<dynamic>强制将解析结果转为列表类型,类型不匹配会直接抛出CastError异常。如果你的代码没有做异常捕获逻辑,就会出现执行中断、看似卡住的现象。
  • 你之前测试的JSON结构根节点应为[]包裹的数组,所以强转List的逻辑可以正常运行,更换为当前根为对象的JSON后自然触发异常。
解决方案

根据你的业务需求选择对应修改方案:

  • 如果你需要使用JSON的全部根节点数据,将强转类型修改为Map<String, dynamic>即可:
var data = json.decode(response) as Map<String, dynamic>;
  • 如果你需要提取JSON内的数组字段(比如示例中的weather字段就是数组结构),可以先解析根Map再提取对应字段:
final Map<String, dynamic> data = json.decode(response) as Map<String, dynamic>;
var list = data['weather'] as List<dynamic>;
  • 鲁棒性优化建议:解析前增加类型判断,避免未知JSON格式导致的崩溃:
final dynamic decodedData = json.decode(response);
if (decodedData is Map<String, dynamic>) {
  // 处理JSON对象逻辑
} else if (decodedData is List<dynamic>) {
  // 处理JSON数组逻辑
} else {
  // 异常格式降级处理
}

内容的提问来源于stack exchange,提问作者Diego jiménez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:39:01