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

