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

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,触发错误
        );
      }
    }
    

    正确的处理方式有两种:

    1. 如果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']),
          );
        }
      }
      
    2. 如果确实需要把这个Map转成String(不推荐,除非业务需求),可以用toString():
      info: json['info'].toString(),
      
  • 额外检查:确认data是否已经是解析后的Map——如果你的data是从网络请求中直接拿到的响应体(比如response.body),那json.decode(data)是正确的;但如果data已经是Map类型,再调用json.decode会导致其他错误,不过你的错误提示指向的是类型不匹配,所以这个概率较低。

内容的提问来源于stack exchange,提问作者rameez khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:15:54