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

flatter:List中的Json解析不是“Map类型”的子类型

尉迟远
2023-03-14

首先,我对处理HTTP请求和其他东西非常陌生。

我jave在JavaSpring中创建了一个API,我有一堆健身程序分配给一个用户,但是当我试图从Flutter中的JSON中获取对象时,会发生这个错误。我使用超文本传输协议和转换镖包。

列表不是类型映射的子类型

问题在于这一行:

var userModel = Users.fromJson(jsonMap);

这是getUsers方法:

Future<Users> getUsers() async{

    var client = http.Client();

    var userModel = null;


    
    var response = await client.get(Uri.parse(Strings.users_url));

    try {
      if (response.statusCode == 200) {
        var jsonString = response.body;
        var jsonMap = json.decode(jsonString);
        print(jsonMap);
        var userModel = Users.fromJson(jsonMap);

      }
    }
    catch(Exception) {
      print(Exception);
      return userModel;
    }


    return userModel;
  }

以下是用户和健身计划课程:

// To parse this JSON data, do
//
//     final users = usersFromJson(jsonString);

import 'dart:convert';

List<Users> usersFromJson(String str) => List<Users>.from(json.decode(str).map((x) => Users.fromJson(x)));

String usersToJson(List<Users> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Users{
  Users({
    this.id,
    this.email,
    this.password,
    this.firstName,
    this.lastName,
    this.birthday,
    this.weight,
    this.height,
    this.fitnessProgrammes,
  });

  int id;
  String email;
  String password;
  String firstName;
  String lastName;
  dynamic birthday;
  int weight;
  int height;
  List<FitnessProgramme> fitnessProgrammes;

  factory Users.fromJson(Map<String, dynamic> json) => Users(
    id: json["id"],
    email: json["email"],
    password: json["password"],
    firstName: json["firstName"],
    lastName: json["lastName"],
    birthday: json["birthday"],
    weight: json["weight"],
    height: json["height"],
    fitnessProgrammes: List<FitnessProgramme>.from(json["fitnessProgrammes"].map((x) => FitnessProgramme.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "id": id,
    "email": email,
    "password": password,
    "firstName": firstName,
    "lastName": lastName,
    "birthday": birthday,
    "weight": weight,
    "height": height,
    "fitnessProgrammes": List<dynamic>.from(fitnessProgrammes.map((x) => x.toJson())),
  };
}

class FitnessProgramme {
  FitnessProgramme({
    this.id,
    this.name,
    this.trainingDifficulty,
  });

  int id;
  String name;
  String trainingDifficulty;

  factory FitnessProgramme.fromJson(Map<String, dynamic> json) => FitnessProgramme(
    id: json["id"],
    name: json["name"],
    trainingDifficulty: json["trainingDifficulty"],
  );

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



共有1个答案

乐正晟
2023-03-14

您的API可能返回一个用户数组,而不是单个用户。因此,解码的JSON类型是List

下面的代码可能会工作并实例化API返回的第一个用户:

var userModel = Users.fromJson(jsonMap[0]);

 类似资料:
  • 我正在开发一个依靠API REST调用的flutter应用程序。来自API的响应有点复杂。当调用我的API(例如:api/产品)时,我可以从日志中看到响应:但是我有这个错误: 类型列表 StackTrace: [更新]:退货产品响应。fromJson(response)而不是response ProductsRespository: ProductsBloc: 回应: ApiProvider: 模

  • 我相信你知道上面的问题。我想知道我怎样才能解决它。我知道我的数据是列表形式的,但在我使用的数据类map中。我真的不明白我应该如何改变它的工作,基本上我只是跟随颤振。开发文档 如果你想知道我做了什么 我基本上是用json_serializable解析数据的。在使用测试数据进行的测试中,所有测试都运行良好。 我的数据: 我的模型包含一个标题,图像 ` 我正在使用以下代码使用数据: 我希望我写得清楚 -

  • 我遇到了一个奇怪的例外 '_InternalLinkedHashMap 我不知道怎么画地图 第一次运行代码时,它可以正常工作,因为它可以访问else部分。当它第二次应该访问第一个部件时,它会产生上述异常。 } 输出 FoodLog输出: {2021年8月3日:{早餐:{鱼片:{碳水化合物:0.0,脂肪:1.7,蛋白质:20.08,钙:95}},晚餐:{},零食:{},午餐:{} E/flatter

  • 我正在学习飞镖和颤振。现在,我尝试将JSON作为一种持久性方法。我犯了很多错误,都是关于类型和内容的。这是我遇到的最新错误:

  • 我试图从API获取数据。我得到了错误类型列表不是地图的子类型。我是新来的,不明白我在哪里犯了错误。 这是我的回帖功能: 在我的主屏幕中,我使用了一个,如下所示: 如何解决此错误?提前谢谢。

  • 我从github获取了代码,但仍然不起作用 生成FutureBuilder时引发了以下类型错误(脏,状态:_FutureBuilderState#a936c):类型“List”不是类型“Map”的子类型 在此列出声明 这是地图