Flutter转换响应为模型时遇_InternalLinkedHashMap类型不匹配错误求助
问题原因及解决方法
这个错误的核心是你的MatchData模型类中,有某个字段的类型定义和接口返回的字段类型不匹配——接口返回的该字段是嵌套对象(即_InternalLinkedHashMap<String, dynamic>类型),但你在模型里把它定义成了String类型,或者在fromJson方法里直接把Map赋值给了String类型的变量。
解决步骤:
先打印接口返回的
data结构,确认每个字段的实际类型:var map = json.decode(data); // 打印完整结构,方便排查 print(json.encode(map['data']));从输出里找到哪个字段是嵌套的Map,而不是String。
检查
MatchData类的定义和fromJson方法:
比如假设接口返回的data里有个info字段是嵌套对象,你的错误写法可能是这样:class MatchData { String info; // 这里定义成了String,但实际是Map MatchData({required this.info}); factory MatchData.fromJson(Map<String, dynamic> json) { return MatchData( info: json['info'], // 直接把Map赋值给String,触发错误 ); } }正确的处理方式有两种:
- 如果
info是一个独立的模型,创建对应的模型类并解析:class InfoModel { String name; InfoModel({required this.name}); factory InfoModel.fromJson(Map<String, dynamic> json) => InfoModel(name: json['name']); } class MatchData { InfoModel info; MatchData({required this.info}); factory MatchData.fromJson(Map<String, dynamic> json) { return MatchData( info: InfoModel.fromJson(json['info']), ); } } - 如果确实需要把这个Map转成String(不推荐,除非业务需求),可以用
toString():info: json['info'].toString(),
- 如果
额外检查:确认
data是否已经是解析后的Map——如果你的data是从网络请求中直接拿到的响应体(比如response.body),那json.decode(data)是正确的;但如果data已经是Map类型,再调用json.decode会导致其他错误,不过你的错误提示指向的是类型不匹配,所以这个概率较低。
内容的提问来源于stack exchange,提问作者rameez khan
相关产品推荐
相关产品推荐

