json解码列表,在flutter中返回null

时间:2020-11-08 06:24:57

标签: android json flutter dart jsondecoder

这是邮递员 { “状态”:200, “信息”: ””, “数据”:{ “ userDetails”:{ “ username”:“ richu”, “电子邮件”:“ test96@gmail.com”, “ id”:“ 1” }, “帖子”:[ { “ id”:“ 1”, “ user_id”:“ 1”, “ post”:“第1条-您好”, “ imagepath”:“ uploads / posts / 1.png”, “ post_date”:“ 2020-11-07 09:10:07”, “状态”:“ 0” }, { “ id”:“ 2”, “ user_id”:“ 1”, “ post”:“ post 2-- hello”, “ imagepath”:“ uploads / posts / 2.png”, “ post_date”:“ 2020-11-07 10:10:07”, “状态”:“ 0” }, { “ id”:“ 3”, “ user_id”:“ 1”, “ post”:“第3个-sfdsfsdfsdfsdfsdfsdfsdfvbcvb”, “ imagepath”:“ uploads / posts / 3.png”, “ post_date”:“ 2020-11-07 11:10:07”, “状态”:“ 0” } ], “关注者”:“ 5”, “关注”:“ 0” } } 程序正在制定中,我需要一个帖子列表,但它仅返回 {“状态”:200,“消息”:“”,“数据”:{“ userDetails”:{“用户名”: “管理员”,“电子邮件”:“ test96@gmail.com”,“ id”:“ 1”},“帖子”:null,“关注者”:“ 9”,“关注”:“ 0”}} 显示错误 E/flutter (12419): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: The method 'map' was called on null. E/flutter (12419): Receiver: null E/flutter (12419): Tried calling: map(Closure: (dynamic) => Posts) E/flutter (12419): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5) E/flutter (12419): #1 new Data.fromJson (package:campgain_mobile/src/models/api_models/user_profile_response.dart:55:47)好,我的代码如下

 `
import 'dart:convert';

import 'package:flutter/foundation.dart';

UserProfileResponse userProfileResponseFromJson(String str) =>
    UserProfileResponse.fromJson(json.decode(str));

String userProfileResponseToJson(UserProfileResponse data) =>
    json.encode(data.toJson());

class UserProfileResponse {
  UserProfileResponse({
    this.status,
    this.message,
    this.data,
  });

  final int status;
  final String message;
  final Data data;

  factory UserProfileResponse.fromJson(Map<String, dynamic> json) =>
      UserProfileResponse(
        status: json["status"],
        message: json["message"],
        data: Data.fromJson(json["data"]),
      );

  Map<String, dynamic> toJson() => {
        "status": status,
        "message": message,
        "data": data.toJson(),
      };
}

class Data {
  Data({
    this.userDetails,
    this.posts,
    this.followers,
    this.following,
  });

  final UserDetails userDetails;
  final List<Posts> posts;
  final String followers;
  final String following;

  factory Data.fromJson(Map<String, dynamic> json) => Data(
        userDetails: UserDetails.fromJson(json["userDetails"]),
        posts: List<Posts>.from(json["posts"].map((x) => Posts.fromJson(x)))
            ,
        followers: json["followers"],
        following: json["following"],
      );

  Map<String, dynamic> toJson() => {
        "userDetails": userDetails.toJson(),
        "posts": List<dynamic>.from(posts.map((x) => x.toJson())),
        "followers": followers,
        "following": following,
      };
}

class Posts {
  Posts({
    this.id,
    this.userId,
    this.post,
    this.imagepath,
    this.postDate,
    this.status,
  });

  final String id;
  final String userId;
  final String post;
  final String imagepath;
  final DateTime postDate;
  final String status;

  factory Posts.fromJson(Map<String, dynamic> json) => Posts(
        id: json["id"],
        userId: json["user_id"],
        post: json["post"],
        imagepath: json["imagepath"],
        postDate: DateTime.parse(json["post_date"]),
        status: json["status"],
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "user_id": userId,
        "post": post,
        "imagepath": imagepath,
        "post_date": postDate.toIso8601String(),
        "status": status,
      };
}

class UserDetails {
  UserDetails({
    this.username,
    this.email,
    this.id,
  });

  String username;
  String email;
  String id;

  factory UserDetails.fromJson(Map<String, dynamic> json) => UserDetails(
        username: json["username"],
        email: json["email"],
        id: json["id"],
      );

  Map<String, dynamic> toJson() => {
        "username": username,
        "email": email,
        "id": id,
      };
}
` 

2 个答案:

答案 0 :(得分:0)

您需要为JSON密钥添加null安全性,请尝试以下操作:

class UserProfileResponse {
  int status;
  String message;
  Data data;

  UserProfileResponse({this.status, this.message, this.data});

  UserProfileResponse.fromJson(Map<String, dynamic> json) {
    status = json['status'];
    message = json['message'];
    data = json['data'] != null ? new Data.fromJson(json['data']) : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['status'] = this.status;
    data['message'] = this.message;
    if (this.data != null) {
      data['data'] = this.data.toJson();
    }
    return data;
  }
}

class Data {
  UserDetails userDetails;
  List<Posts> posts;
  String followers;
  String following;

  Data({this.userDetails, this.posts, this.followers, this.following});

  Data.fromJson(Map<String, dynamic> json) {
    userDetails = json['userDetails'] != null
        ? new UserDetails.fromJson(json['userDetails'])
        : null;
    if (json['posts'] != null) {
      posts = new List<Posts>();
      json['posts'].forEach((v) {
        posts.add(new Posts.fromJson(v));
      });
    }
    followers = json['followers'];
    following = json['following'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.userDetails != null) {
      data['userDetails'] = this.userDetails.toJson();
    }
    if (this.posts != null) {
      data['posts'] = this.posts.map((v) => v.toJson()).toList();
    }
    data['followers'] = this.followers;
    data['following'] = this.following;
    return data;
  }
}

class UserDetails {
  String username;
  String email;
  String id;

  UserDetails({this.username, this.email, this.id});

  UserDetails.fromJson(Map<String, dynamic> json) {
    username = json['username'];
    email = json['email'];
    id = json['id'];
  }

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

class Posts {
  String id;
  String userId;
  String post;
  String imagepath;
  String postDate;
  String status;

  Posts(
      {this.id,
      this.userId,
      this.post,
      this.imagepath,
      this.postDate,
      this.status});

  Posts.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    userId = json['user_id'];
    post = json['post'];
    imagepath = json['imagepath'];
    postDate = json['post_date'];
    status = json['status'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['user_id'] = this.userId;
    data['post'] = this.post;
    data['imagepath'] = this.imagepath;
    data['post_date'] = this.postDate;
    data['status'] = this.status;
    return data;
  }
}

答案 1 :(得分:0)

当您尝试在json ['posts']上调用map方法时,发生错误。如果json ['posts']为null,则将发生null指针异常,因此您需要确保编码器和解码器为null安全。使用下面的代码

import 'dart:convert';

UserProfileResponse userProfileResponseFromJson(String str) =>
    UserProfileResponse.fromJson(json.decode(str));

String userProfileResponseToJson(UserProfileResponse data) =>
    json.encode(data.toJson());

class UserProfileResponse {
  UserProfileResponse({
    this.status,
    this.message,
    this.data,
  });

  final int status;
  final String message;
  final Data data;

  factory UserProfileResponse.fromJson(Map<String, dynamic> json) =>
      UserProfileResponse(
        status: json["status"],
        message: json["message"],
        data: Data.fromJson(json["data"]),
      );

  Map<String, dynamic> toJson() => {
        "status": status,
        "message": message,
        "data": data?.toJson(),
      };
}

class Data {
  Data({
    this.userDetails,
    this.posts,
    this.followers,
    this.following,
  });

  final UserDetails userDetails;
  final List<Posts> posts;
  final String followers;
  final String following;

  factory Data.fromJson(Map<String, dynamic> json) {
    return json != null
        ? Data(
            userDetails: UserDetails.fromJson(json["userDetails"]),
            posts: json["posts"] != null
                ? List<Posts>.from(json["posts"].map((x) => Posts.fromJson(x)))
                : null,
            followers: json["followers"],
            following: json["following"],
          )
        : null;
  }

  Map<String, dynamic> toJson() => {
        "userDetails": userDetails?.toJson(),
        "posts": posts != null
            ? List<dynamic>.from(posts?.map((x) => x.toJson()))
            : null,
        "followers": followers,
        "following": following,
      };
}

class Posts {
  Posts({
    this.id,
    this.userId,
    this.post,
    this.imagepath,
    this.postDate,
    this.status,
  });

  final String id;
  final String userId;
  final String post;
  final String imagepath;
  final DateTime postDate;
  final String status;

  factory Posts.fromJson(Map<String, dynamic> json) {
    return json != null
        ? Posts(
            id: json["id"],
            userId: json["user_id"],
            post: json["post"],
            imagepath: json["imagepath"],
            postDate: DateTime.parse(json["post_date"]),
            status: json["status"],
          )
        : null;
  }

  Map<String, dynamic> toJson() => {
        "id": id,
        "user_id": userId,
        "post": post,
        "imagepath": imagepath,
        "post_date": postDate?.toIso8601String(),
        "status": status,
      };
}

class UserDetails {
  UserDetails({
    this.username,
    this.email,
    this.id,
  });

  String username;
  String email;
  String id;

  factory UserDetails.fromJson(Map<String, dynamic> json) {
    return json != null
        ? UserDetails(
            username: json["username"],
            email: json["email"],
            id: json["id"],
          )
        : null;
  }

  Map<String, dynamic> toJson() => {
        "username": username,
        "email": email,
        "id": id,
      };
}