【发布时间】:2020-04-28 12:29:11
【问题描述】:
我以 JSON 格式返回多条记录,需要用它们填充一个对象。 Dart 中是怎么做的?
HomeCategory(0, Icons.check, Colors.blue[800], "Check In", [Task(0, "Check In", true),]),
JSON 结果包含所有这些数据。
【问题讨论】:
我以 JSON 格式返回多条记录,需要用它们填充一个对象。 Dart 中是怎么做的?
HomeCategory(0, Icons.check, Colors.blue[800], "Check In", [Task(0, "Check In", true),]),
JSON 结果包含所有这些数据。
【问题讨论】:
将 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);
}
根据 HomeCategory 和 Task 类的结构以及 JSON 的结构调整上述代码。 (当然,您还需要为 Task 类提供 fromJson 构造函数。)
编辑:如果您传入的 JSON 对象是一个列表,您可以简单地更改使用反序列化 json 对象的方式:
List<dynamic> jsonList = json.decode(jsonString);
List<HomeCategory> homeCategories = jsonList.map((jsonObj) => HomeCategory.fromJson(jsonObj)).toList();
【讨论】:
HomeCategory 视为“列表”。将 JSON 对象视为“HomeCategory 对象列表”。