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

Flutter中JSON解析报错:_Map<String, dynamic>无法转为LoginResponse

JSON解析异常修复方案

核心问题1:直接赋值类型不匹配

jsonDecode仅能将JSON字符串转换为Map<String, dynamic>类型,不能直接赋值给LoginResponse对象,必须通过模型类的fromJson工厂方法完成转换:

// 错误写法
LoginResponse response = jsonDecode(loginResponse.body);

// 正确写法
Map<String, dynamic> jsonMap = jsonDecode(loginResponse.body);
LoginResponse response = LoginResponse.fromJson(jsonMap);

核心问题2:字段类型不匹配

JSON中userId是数字类型(29922),但你的UserData类将其定义为String,强转as String会触发类型转换异常,两种修复方式任选:

方式一:将userId改为int类型

class UserData{
  final int userId;

  UserData({required this.userId});

  factory UserData.fromJson(Map<String, dynamic> json) {
    return UserData(
      userId: json['userId'] as int
    );
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['userId'] = this.userId;
    return data;
  }
}

方式二:保留String类型,将数字转为字符串

factory UserData.fromJson(Map<String, dynamic> json) {
  return UserData(
    userId: json['userId'].toString()
  );
}

可选优化:补充缺失字段

JSON中userData包含applicationId和siteId字段,但你的模型类未定义,若业务需要使用这两个字段,建议补充:

class UserData{
  final int userId;
  final int applicationId;
  final int siteId;

  UserData({required this.userId, required this.applicationId, required this.siteId});

  factory UserData.fromJson(Map<String, dynamic> json) {
    return UserData(
      userId: json['userId'] as int,
      applicationId: json['applicationId'] as int,
      siteId: json['siteId'] as int,
    );
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['userId'] = this.userId;
    data['applicationId'] = this.applicationId;
    data['siteId'] = this.siteId;
    return data;
  }
}

最终可运行的main.dart代码

//loginResponse.body是JSON数据
http.Response loginResponse = await postRequest();
Map<String, dynamic> jsonMap = jsonDecode(loginResponse.body);
LoginResponse response = LoginResponse.fromJson(jsonMap);
print('status:>>${response.verificationStatus}');
print('userId:>>${response.userData.userId}');

内容的提问来源于stack exchange,提问作者Sreejith Sree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:55:14