Список значений в Dart
Массив в JSON записывают квадратными скобками и
элементами через запятую. Поле типа
List<String> в карте из toJson
превращается в такой массив, если каждый элемент
списка сам допустим для jsonEncode.
Группа участников проекта - имя команды и список логинов. Оба поля входят в один класс:
import 'dart:convert';
class ProjectTeam {
ProjectTeam(this.name, this.members);
final String name;
final List<String> members;
Map<String, Object?> toJson() => {
'name': name,
'members': members,
};
factory ProjectTeam.fromJson(Map<String, Object?> json) {
return ProjectTeam(
json['name'] as String,
(json['members'] as List<Object?>)
.map((e) => e as String)
.toList(),
);
}
}
var team = ProjectTeam('alpha', ['kim', 'lee', 'pat']);
print(jsonEncode(team.toJson()));
В строке появится ключ members со значением-массивом
строк. Пустой список сериализуется как [],
порядок элементов сохраняется.
Разбор из текста восстанавливает List с тем же
порядком. Достаточно передать JSON, где массив уже
задан литералом:
import 'dart:convert';
class ProjectTeam {
ProjectTeam(this.name, this.members);
final String name;
final List<String> members;
Map<String, Object?> toJson() => {
'name': name,
'members': members,
};
factory ProjectTeam.fromJson(Map<String, Object?> json) {
return ProjectTeam(
json['name'] as String,
(json['members'] as List<Object?>)
.map((e) => e as String)
.toList(),
);
}
}
var text = '{"name":"beta","members":["ada","bob"]}';
var raw = jsonDecode(text);
if (raw is Map<String, Object?>) {
var team = ProjectTeam.fromJson(raw);
print(team.members.length);
print(team.members.first);
}
Опишите класс RecipeCard
с полем title и списком tags.
Запишите карточку с названием "Soup"
и тегами "hot", "veg" в JSON
и выведите строку.
Разберите JSON
{"title":"Pasta","tags":["italian","fast"]}
в RecipeCard и выведите второй тег
отдельной строкой.