[英]Can not deserialize json data in flutter
我是 flutter 开发的新手,我试图从 REST API 获取数据,它的响应是这样的
{
"success": true,
"data": {
"pagination": {
"pages": 2,
"pageSize": 10,
"items": 20,
"currentPage": 1
},
"items": [
{
"_id": "5f9524594361c1001f249f5b",
"firstName": "sudesh",
"lastName": "maduranga",
"role": "admin",
"email": "ddd@mailinator.com",
"activated": true,
"disabled": 0
},
{
"_id": "5f9524594361c1001f249f5c",
"firstName": "Sam",
"lastName": "Anderson",
"role": "admin",
"email": "sss@mailinator.com",
"activated": true,
"disabled": 0
}
]
}
}
在 flutter 我有这个 model class 来使用那个响应
class UserListResponseModel { final bool success; final Data data; UserListResponseModel( { this.success, this.data, }); factory UserListResponseModel.fromJson(Map<String, dynamic> parsedJson){ return UserListResponseModel( success: parsedJson['success'], data: Data.fromJson(parsedJson['data']), ); } } class Data { final PaginationModel pagination; final List<Users> items; Data( { this.pagination, this.items, }); factory Data.fromJson(Map<String, dynamic> parsedJson){ var usersList = parsedJson['data'] as List; List<Users> userList = usersList.map((i) => Users.fromJson(i)).toList(); return Data( pagination: PaginationModel.fromJson(parsedJson['pagination']), items: userList ); } } class Users { String userId; String firstName; String lastName; String role; String email; String activated; String disabled; Users({ this.userId, this.firstName, this.lastName, this.role, this.email, this.activated, this.disabled }); factory Users.fromJson(Map<String, dynamic> parsedJson){ return Users( userId: parsedJson['userId'], firstName: parsedJson['firstName'], lastName: parsedJson['lastName'], role: parsedJson['role'], email: parsedJson['email'], activated: parsedJson['disabled'] ); } }
当我运行应用程序时出现此错误
E/flutter (29178): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: Exception: NoSuchMethodError: The method 'map' was called on null. E/flutter (29178): Receiver: null E/flutter (29178): Tried calling: map<Users>(Closure: (dynamic) => Users) E/flutter (29178): #0 UserService.getAllUsers (package:frontend/services/user/user_service.dart:51:7) E/flutter (29178): <asynchronous suspension> E/flutter (29178): #1 _UserListState.getUserList (package:frontend/screens/users/list.dart:30:52) E/flutter (29178): <asynchronous suspension> E/flutter (29178): #2 _UserListState.initState (package:frontend/screens/users/list.dart:22:5) E/flutter (29178): #3 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4765:58) E/flutter (29178): #4 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4601:5) E/flutter (29178): #5 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3569:14) E/flutter (29178): #6 Element.updateChild (package:flutter/src/widgets/framework.dart:3324:20) E/flutter (29178): #7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16) E/flutter (29178): #8 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5) E/flutter (29178): #9 StatelessElement.update (package:flutter/src/widgets/framework.dart:4708:5) E/flutter (29178): #10 Element.updateChild (package:flutter/src/widgets/framework.dart:3314:15) E/flutter (29178): #11 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4652:16) E/flutter (29178): #12 Element.rebuild (package:flutter/src/widgets/framework.dart:4343:5) E/flutter (29178): #13 ProxyElement.update (package:flutter/src/widgets/framework.dart:4987:5)
我也使用了这行代码,
var usersList = parsedJson['data']['items'] as List;
但没有运气,错误是
E/flutter (29178): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: Exception: NoSuchMethodError: The method '[]' was called on null. E/flutter (29178): Receiver: null E/flutter (29178): Tried calling: []("items") E/flutter (29178): #0 UserService.getAllUsers (package:frontend/services/user/user_service.dart:51:7) E/flutter (29178): <asynchronous suspension> E/flutter (29178): #1 _UserListState.getUserList (package:frontend/screens/users/list.dart:30:52) E/flutter (29178): <asynchronous suspension> E/flutter (29178): #2 _UserListState.initState (package:frontend/screens/users/list.dart:22:5) E/flutter (29178): #3 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4765:58)
我坚持这一点,请帮助我。 任何建议将不胜感激
您需要在映射列表之前进行检查。 如果它是 null 那么你不能 map 它。 您必须返回 null。您的 model 应如下所示:
class UserListResponseModel {
bool success;
Data data;
UserListResponseModel({this.success, this.data});
UserListResponseModel.fromJson(Map<String, dynamic> json) {
success = json['success'];
data = json['data'] != null ? new Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['success'] = this.success;
if (this.data != null) {
data['data'] = this.data.toJson();
}
return data;
}
}
class Data {
Pagination pagination;
List<Items> items;
Data({this.pagination, this.items});
Data.fromJson(Map<String, dynamic> json) {
pagination = json['pagination'] != null
? new Pagination.fromJson(json['pagination'])
: null;
if (json['items'] != null) {
items = new List<Items>();
json['items'].forEach((v) {
items.add(new Items.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.pagination != null) {
data['pagination'] = this.pagination.toJson();
}
if (this.items != null) {
data['items'] = this.items.map((v) => v.toJson()).toList();
}
return data;
}
}
class Pagination {
int pages;
int pageSize;
int items;
int currentPage;
Pagination({this.pages, this.pageSize, this.items, this.currentPage});
Pagination.fromJson(Map<String, dynamic> json) {
pages = json['pages'];
pageSize = json['pageSize'];
items = json['items'];
currentPage = json['currentPage'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['pages'] = this.pages;
data['pageSize'] = this.pageSize;
data['items'] = this.items;
data['currentPage'] = this.currentPage;
return data;
}
}
class Items {
String sId;
String firstName;
String lastName;
String role;
String email;
bool activated;
int disabled;
Items(
{this.sId,
this.firstName,
this.lastName,
this.role,
this.email,
this.activated,
this.disabled});
Items.fromJson(Map<String, dynamic> json) {
sId = json['_id'];
firstName = json['firstName'];
lastName = json['lastName'];
role = json['role'];
email = json['email'];
activated = json['activated'];
disabled = json['disabled'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['_id'] = this.sId;
data['firstName'] = this.firstName;
data['lastName'] = this.lastName;
data['role'] = this.role;
data['email'] = this.email;
data['activated'] = this.activated;
data['disabled'] = this.disabled;
return data;
}
}
您可以使用此网站将 JSON 转换为 Dart model。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.