Как парсить array из json
Каким образом я могу распарсить подобный json?
[{"id":"2fd7b680-dfe3-430a-e792-08d7dae3fc66","group":"КИ19-11Б","weekType":"odd","dayOfWeek":"wednesday","term":{"classNumber":1,"startsAt":"08:30:00","endsAt":"10:05:00"},"instructorName":"Кириллова Светлана Владимировна","classType":"Practice","audience":{"id":3,"number":"117","corpus":"УЛК","border":null},"subject":{"id":5,"name":"Математический анализ","description":null}},{"id":"af4e8c34-0532-4038-e794-08d7dae3fc66","group":"КИ19-11Б","weekType":"odd","dayOfWeek":"wednesday","term":{"classNumber":2,"startsAt":"10:15:00","endsAt":"11:50:00"},"instructorName":"Кушнаренко А В","classType":"Practice","audience":{"id":6,"number":"410","corpus":"УЛК","border":null},"subject":{"id":3,"name":"Введение в профессиональную деятельность","description":null}}]
Ответы (2 шт):
Автор решения: Eugene Kuznetsov
→ Ссылка
В заголовке один вопрос, в теле вопроса: "как его парсить", ответ на первый вопрос уже дали тут!!!, а второй, если вам нужен массив объектов, принцип такой, Допустим есть JSON вида:
{
"tags": [
{
"name": "dart",
"quantity": 12
},
{
"name": "flutter",
"quantity": 25
},
{
"name": "json",
"quantity": 8
}
]
}
Описываем класс Tag
class Tag {
String name;
int quantity;
Tag(this.name, this.quantity);
factory Tag.fromJson(dynamic json) {
return Tag(json['name'] as String, json['quantity'] as int);
}
@override
String toString() {
return '{ ${this.name}, ${this.quantity} }';
}
}
декодируем строку(наш JSON), и пробегаемся с помощью метода map() по списку тегов
import 'dart:convert';
main() {
String arrayObjsText =
'{"tags": [{"name": "dart", "quantity": 12}, {"name": "flutter", "quantity": 25}, {"name": "json", "quantity": 8}]}';
var tagObjsJson = jsonDecode(arrayObjsText)['tags'] as List;
List<Tag> tagObjs = tagObjsJson.map((tagJson) => Tag.fromJson(tagJson)).toList();
print(tagObjs);
}
на выходе имеем, нужный список:
[{ dart, 12 }, { flutter, 25 }, { json, 8 }]
Автор решения: MiT
→ Ссылка
Перед тем как использовать, прочитайте ответ от @EugeneKuznetsov
final data = dataFromJson(jsonString);
...
import 'dart:convert';
List<Data> dataFromJson(String str) => List<Data>.from(json.decode(str).map((x) => Data.fromJson(x)));
String dataToJson(List<Data> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Data {
final String id;
final String group;
final String weekType;
final String dayOfWeek;
final Term term;
final String instructorName;
final String classType;
final Audience audience;
final Subject subject;
Data({
this.id,
this.group,
this.weekType,
this.dayOfWeek,
this.term,
this.instructorName,
this.classType,
this.audience,
this.subject,
});
factory Data.fromJson(Map<String, dynamic> json) => Data(
id: json["id"],
group: json["group"],
weekType: json["weekType"],
dayOfWeek: json["dayOfWeek"],
term: Term.fromJson(json["term"]),
instructorName: json["instructorName"],
classType: json["classType"],
audience: Audience.fromJson(json["audience"]),
subject: Subject.fromJson(json["subject"]),
);
Map<String, dynamic> toJson() => {
"id": id,
"group": group,
"weekType": weekType,
"dayOfWeek": dayOfWeek,
"term": term.toJson(),
"instructorName": instructorName,
"classType": classType,
"audience": audience.toJson(),
"subject": subject.toJson(),
};
}
class Audience {
final int id;
final String number;
final String corpus;
final dynamic border;
Audience({
this.id,
this.number,
this.corpus,
this.border,
});
factory Audience.fromJson(Map<String, dynamic> json) => Audience(
id: json["id"],
number: json["number"],
corpus: json["corpus"],
border: json["border"],
);
Map<String, dynamic> toJson() => {
"id": id,
"number": number,
"corpus": corpus,
"border": border,
};
}
class Subject {
final int id;
final String name;
final dynamic description;
Subject({
this.id,
this.name,
this.description,
});
factory Subject.fromJson(Map<String, dynamic> json) => Subject(
id: json["id"],
name: json["name"],
description: json["description"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"description": description,
};
}
class Term {
final int classNumber;
final String startsAt;
final String endsAt;
Term({
this.classNumber,
this.startsAt,
this.endsAt,
});
factory Term.fromJson(Map<String, dynamic> json) => Term(
classNumber: json["classNumber"],
startsAt: json["startsAt"],
endsAt: json["endsAt"],
);
Map<String, dynamic> toJson() => {
"classNumber": classNumber,
"startsAt": startsAt,
"endsAt": endsAt,
};
}