繁体   English   中英

无法反序列化flutter中的json数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM