【问题标题】:Filling Object with JSON result in flutter用 JSON 填充对象会导致颤动
【发布时间】:2020-04-28 12:29:11
【问题描述】:

我以 JSON 格式返回多条记录,需要用它们填充一个对象。 Dart 中是怎么做的?

HomeCategory(0, Icons.check, Colors.blue[800], "Check In", [Task(0, "Check In", true),]),

JSON 结果包含所有这些数据。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    将 JSON 字符串反序列化为映射:

    import 'dart:convert';
    
    ...
    
    Map<String, dynamic> jsonObj = json.decode(jsonString);
    

    然后为您的类创建一个工厂构造函数,将地图转换为您的对象:

    class HomeCategory {
      final int id;
      final String iconCode;
      final String colorCode;
      final String message;
      final List<Task> tasks;
    
      HomeCategory(
        this.id,
        this.iconCode,
        this.colorCode,
        this.message,
        this.tasks,
      );
    
      HomeCategory.fromJson(Map<String, dynamic> jsonObj) {
        int id = jsonObj['id'];
        String iconCode = jsonObj['iconCode'];
        String colorCode = jsonObj['colorCode'];
        String message = jsonObj['message'];
    
        List<Task> tasks = [];
        var tasksObj = jsonObj['tasks'];
        if (tasksObj != null && tasksObj is List) {
          tasks = tasksObj.map((taskObj) => Task.fromJson(taskObj)).toList();
        }
    
        return HomeCategory(id, iconCode, colorCode, message, tasks);
      }
    

    根据 HomeCategoryTask 类的结构以及 JSON 的结构调整上述代码。 (当然,您还需要为 Task 类提供 fromJson 构造函数。)


    编辑:如果您传入的 JSON 对象是一个列表,您可以简单地更改使用反序列化 json 对象的方式:

    List<dynamic> jsonList = json.decode(jsonString);
    List<HomeCategory> homeCategories = jsonList.map((jsonObj) => HomeCategory.fromJson(jsonObj)).toList();
    

    【讨论】:

    • 谢谢。 HomeCategory 也是一个列表,它将是多条记录。
    • @SamCromer 不要将HomeCategory 视为“列表”。将 JSON 对象视为“HomeCategory 对象列表”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2011-11-14
    • 1970-01-01
    相关资源
    最近更新 更多