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

