当前位置: 首页 > 知识库问答 >
问题:

错误:“列表”不是“映射”类型的子类型

花烨
2023-03-14

我试图获得用户信息后,用户输入电子邮件和密码。我使用的api会返回我用户的额外信息,所以我尝试从中获取这些信息。

我试图解析这个json:

[
    {
        "_user": {
            "id": "id-here",
            "name": "Mobile",
            "email": "mobile.user@asd.com",
            "photo": null,
            "title": null,
            "surname": "User",
            "bg_photo": null,
            "isactive": true,
            "password": "123456789",
            "username": "mobileuser",
            "checkInfo": true,
            "role_type": "asd",
            "profession": null,
            "isemailverify": false
        },
        "tokens": {
            "accessToken": "someTokenhere",
            "refreshToken": "anotherOne"
        }
    }
]

这些是我的模型:

class User {
  User({
    this.user,
    this.tokens,
  });

  UserClass user;
  Tokens tokens;

  factory User.fromJson(Map<String, dynamic> json){
    return User(
      user: UserClass.fromJson(json["_user"]),
      tokens: Tokens.fromJson(json["tokens"]),
    );
  }
}

class Tokens {
  Tokens({
    this.accessToken,
    this.refreshToken,
  });

  String accessToken;
  String refreshToken;

  factory Tokens.fromJson(Map<String, dynamic> json) => Tokens(
    accessToken: json["accessToken"],
    refreshToken: json["refreshToken"],
  );
}

class UserClass {
  UserClass({
    this.id,
    this.name,
    this.email,
    this.photo,
    this.title,
    this.surname,
    this.bgPhoto,
    this.isactive,
    this.password,
    this.username,
    this.checkInfo,
    this.roleType,
    this.profession,
    this.isemailverify,
  });

  String id;
  String name;
  String email;
  String photo;
  String title;
  String surname;
  String bgPhoto;
  bool isactive;
  String password;
  String username;
  bool checkInfo;
  String roleType;
  String profession;
  bool isemailverify;

  factory UserClass.fromJson(Map<String, dynamic> json) => UserClass(
    id: json["id"],
    name: json["name"],
    email: json["email"],
    photo: json["photo"],
    title: json["title"],
    surname: json["surname"],
    bgPhoto: json["bg_photo"],
    isactive: json["isactive"],
    password: json["password"],
    username: json["username"],
    checkInfo: json["checkInfo"],
    roleType: json["role_type"],
    profession: json["profession"],
    isemailverify: json["isemailverify"],
  );
}

这是我发送电子邮件、密码和获取用户数据的部分:

Future<User> checkUserExist(String email, String password) async {
    final response = await http.post(
      Uri.https('SomeApi', 'Route'),
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
      },
      body: jsonEncode(<String, String>{
        'email': email,
        'password': password
      }),
    );
    if (response.statusCode == 200) {
      return User.fromJson(jsonDecode(response.body));
    } else {
      throw Exception(jsonDecode(response.body));
    }
  }

这是给我错误的部分

if (response.statusCode == 200) {
      return User.fromJson(jsonDecode(response.body));
} 

我打印了响应体,它给出了我想要的字符串,但是jsonDecode返回了一个列表,所以我不能使用它。我怎样才能解决这个问题?提前谢谢。

共有2个答案

公羊光明
2023-03-14
if (response.statusCode == 200) {
      return User.fromJson(jsonDecode(response.body)[0]);
    }
督辉
2023-03-14

改变这个

return User.fromJson(jsonDecode(response.body))

为此:

return User.fromJson(jsonDecode(response.body)[0])

原因是你做每件事都很完美,直到最后一步。如果仔细查看您的响应,它确实有一个映射或\u user标记,但是这个映射实际上在一个列表中,请注意{}周围的方括号[]

您需要访问的地图位于此列表的index[0],然后一切都会正常运行。

 类似资料:
  • 我目前正在构建一个通过api读取数据的应用程序,我正在尝试从JSON占位符解析JSON api。 我为用户(users_future_model.dart)做了一个模型类: 这是将json读入小部件的main.dart: 这是我试图阅读的JSON信息,尽管它只是其中的一小部分: 我当前遇到的错误是: 如何纠正此错误?

  • 因此,我创建了一个应用程序,通过api读取数据,并尝试解析JSON api 这是我的错误截图 我试着把它改成一个列表,但它仍然读取一个错误 这是我的密码大象。飞奔 如何纠正此错误?请帮忙

  • 我目前正在构建一个应用程序,通过医疗api读取数据,我试图解析JSON。 我为用户创建了一个模型类: 这是我试图阅读的JSON信息: 但是我得到的错误列表不是Map类型的子类型 如何修复此错误?

  • 当我尝试解码json时,它会给我错误。 我的模范班 功能在我使用它的地方 json数据

  • 我正面临着一个奇怪的颤动错误。我使用json序列化。 这是我的密码 我的web api发送的数据如下 这是数组的数组。 生成错误的代码是 它给出的错误 JSON数据这里是JSON数据格式的屏幕截图

  • 我对Flutter编程非常陌生,我正在尝试导入一个本地JSON文件,其中包含书籍数据,如标题、作者、发布年份等。 最初我使用JSON-to-DART转换器来组装一个图书数据模型,现在我正在尝试创建一个函数,在该函数中,程序获取本地JSON文件,并使用类中的方法将数据解析为地图。 我遇到的问题是返回类型