Flutter JSON解析异常:List<dynamic>无法转为Map<String, dynamic>求助
解决JSON解析类型不匹配的问题
我太懂这种卡壳到头疼的感觉了!你遇到的类型'List<dynamic>'不是'Map<String, dynamic>'的子类型错误,核心原因就是两种场景的JSON结构完全不同,解析逻辑得跟着对应调整。
先把两种场景的结构差异理清楚:
- 场景1(JSON树视图1):JSON根节点是一个对象,文章数据嵌套在
articles字段对应的列表里 - 场景2(JSON树视图2):JSON根节点直接就是文章列表,没有外层的对象包裹
你之前写的场景2代码之所以报错,是因为解析函数的参数还在要求Map<String, dynamic>,但实际传入的是List类型,自然会触发类型不匹配的异常。
场景2的正确解析代码
直接把解析函数的参数类型改成List<dynamic>,然后对这个列表做转换即可:
ResponseTopHeadlinesNews _$ResponseTopHeadlinesNewsFromJson(List<dynamic> json) { return ResponseTopHeadlinesNews( json?.map((e) => e == null ? null : Article.fromJson(e as Map<String, dynamic>))?.toList(), ); }
额外小提醒
如果你的代码是用json_serializable自动生成的,可能需要手动覆盖这个解析函数——因为默认生成的逻辑是针对根节点为对象的情况,而场景2是根节点为列表,属于特殊场景,需要单独处理。
这样调整后,就能顺利解析根节点为列表的JSON数据啦!
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

