Reputation: 25
Is it possible to get a list from json without looping the jsonResponse? In the sample below, i want to get list of language targetList = ["Pascal", "Python","SQL"]
{
"eBooks":[
{
"language":"Pascal",
"edition":"third"
},
{
"language":"Python",
"edition":"four"
},
{
"language":"SQL",
"edition":"second"
}
]
}
Upvotes: 1
Views: 80
Reputation: 34210
void main() {
String json = "{\"eBooks\":[{\"language\":\"Pascal\",\"edition\":\"third\"},{\"language\":\"Python\",\"edition\":\"four\"},{\"language\":\"SQL\",\"edition\":\"second\"}]}";
JsonData result = JsonData.fromJson(jsonDecode(json));
List<String> targetList = [];
for(var book in result.eBooks!) {
targetList.add(book.language!);
}
print(targetList); // [Pascal, Python, SQL]
}
Json Object:
class JsonData {
List<EBooks>? _eBooks;
List<EBooks>? get eBooks => _eBooks;
JsonData({List<EBooks>? eBooks}) {
_eBooks = eBooks;
}
JsonData.fromJson(dynamic json) {
if (json["eBooks"] != null) {
_eBooks = [];
json["eBooks"].forEach((v) {
_eBooks?.add(EBooks.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
var map = <String, dynamic>{};
if (_eBooks != null) {
map["eBooks"] = _eBooks?.map((v) => v.toJson()).toList();
}
return map;
}
}
class EBooks {
String? _language;
String? _edition;
String? get language => _language;
String? get edition => _edition;
EBooks({String? language, String? edition}) {
_language = language;
_edition = edition;
}
EBooks.fromJson(dynamic json) {
_language = json["language"];
_edition = json["edition"];
}
Map<String, dynamic> toJson() {
var map = <String, dynamic>{};
map["language"] = _language;
map["edition"] = _edition;
return map;
}
}
Upvotes: 1
Reputation: 808
Have a look at the example below
void main() {
var map = {
"eBooks": [
{"language": "Pascal", "edition": "third"},
{"language": "Python", "edition": "four"},
{"language": "SQL", "edition": "second"}
]
};
var lst = map["eBooks"].map((e) => e["language"]).toList();
print(lst.length);
lst.forEach((l) {
print(l);
});
}
Upvotes: 1
Reputation: 31
First you need to create a model class. Then we see a second value in which the other variables are kept. Then you can access the list in it by creating an object from this class. You can translate your model to JSON to Dart language through these sites. jsontodart jsontodart2
class TargetList {
List<EBooks> eBooks;
TargetList({this.eBooks});
TargetList.fromJson(Map<String, dynamic> json) {
if (json['eBooks'] != null) {
eBooks = new List<EBooks>();
json['eBooks'].forEach((v) {
eBooks.add(new EBooks.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.eBooks != null) {
data['eBooks'] = this.eBooks.map((v) => v.toJson()).toList();
}
return data;
}
}
class EBooks {
String language;
String edition;
EBooks({this.language, this.edition});
EBooks.fromJson(Map<String, dynamic> json) {
language = json['language'];
edition = json['edition'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['language'] = this.language;
data['edition'] = this.edition;
return data;
}
}
Upvotes: 0