【问题标题】:How to pass a List<dynamic> to a List<MyModel> from a JSON?如何将 List<dynamic> 从 JSON 传递给 List<MyModel>?
【发布时间】:2020-03-02 01:52:12
【问题描述】:

我有一个从 API 检索数据的应用程序,我以列表的形式接收数据,当我打印它时,我可以看到数据正常。

[
  {
    "1": "MaxMilyin",
    "2": "409733",
    "3": "1130794"
  },
  {
    "1": "HippopotamusRex",
    "2": "346742",
    "3": "1204932"
  },
  ...
]

当我尝试将列表传递给我的模型列表时,我只得到:

   [Instance of 'TopTenUsersModel', Instance of 'TopTenUsersModel', ...]

这是我的模型类,我用这个site 来生成类:

class TopTenUsersModel {

  String s1;
  String s2;
  String s3;

  TopTenUsersModel({this.s1, this.s2, this.s3});

  TopTenUsersModel.fromJson(Map<String, dynamic> json) {
    s1 = json['1'];
    s2 = json['2'];
    s3 = json['3'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['1'] = this.s1;
    data['2'] = this.s2;
    data['3'] = this.s3;
    return data;
  }
}

这是我将数据作为模型返回的方法。

static Future<List<TopTenUsersModel>> getTopTenUsers() async{

    try{

      print("INICIANDO CONEXÃO COM A API...");

      var response = await client.get(
        Constants.BASE_URL + Constants.getTopTenUsers + Constants.AUTH
      );

      //print("PRINT RESPONSE NETWORK UTIL: ${response.body}");

      // Here I can see the data ok!

      List<dynamic> list = json.decode(response.body) as List;

      // Here I get 'Instance of 'TopTenUsersModel''

      return (json.decode(response.body) as List)
          .map((item) => TopTenUsersModel.fromJson(item))
          .toList();

    } on SocketException catch (e){
        throw (e.message);
    } finally {
      client.close();
    }
  }

【问题讨论】:

  • 我不知道你想要什么。看来您已尝试在 tou 控制台中打印 TopTenUsersModel 列表。您必须知道无法在控制台中直接打印 Dart 对象。请在您的 TopTenUsersModel 类中实现一个 toSting 方法,然后您可以打印您的 TopTenUsersModel 的任何实例
  • 看看this。检查“JSON 结构 #5:地图列表”部分

标签: arrays json flutter dart json-deserialization


【解决方案1】:

你应该通过以下方式实现

模型类

  class TopTenUsersModelResponse {
  final List<TopTenUsersModel> list;

  TopTenUsersModelResponse({
    this.list,
  });

  factory TopTenUsersModelResponse.fromJson(List<dynamic> parsedJson) {
    List<TopTenUsersModel> list = new List<TopTenUsersModel>();
    list = parsedJson.map((i) => TopTenUsersModel.fromJson(i)).toList();

    return new TopTenUsersModelResponse(list: list);
  }
}

替换

 List<dynamic> list = json.decode(response.body) as List;

      // Here I get 'Instance of 'TopTenUsersModel''

      return (json.decode(response.body) as List)
          .map((item) => TopTenUsersModel.fromJson(item))
          .toList();

final List parsed = json.decode(response.body);
List<TopTenUsersModel> responseModelList = new TopTenUsersModelResponse.fromJson(parsed).list;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 2021-05-22
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多