Reputation: 1227
I am fetching data like this
Future<List> dosomestuff() async {
http.Response res = await http.get(
'http://retailapi.airtechsolutions.pk/api/menu/2112',
);
Map<String, dynamic> map = json.decode(res.body);
print(map);
}
Its showing data like this
{
"Categories": [{
"ID": 1064,
"Name": "Pizza",
"Subcategories": [{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [{
"ID": 1195,
"Name": "Fajita Pizza (S)"
},
{
"ID": 1196,
"Name": "Fajita Pizza (M)"
},
{
"ID": 1197,
"Name": "Fajita Pizza (L)"
}
]
},
{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [{
"ID": 1195,
"Name": "Fajita Pizza (S)"
},
{
"ID": 1196,
"Name": "Fajita Pizza (M)"
},
{
"ID": 1197,
"Name": "Fajita Pizza (L)"
}
]
}
]
},
{
"ID": 1064,
"Name": "Pizza",
"Subcategories": [{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [{
"ID": 1195,
"Name": "Fajita Pizza (S)"
},
{
"ID": 1196,
"Name": "Fajita Pizza (M)"
},
{
"ID": 1197,
"Name": "Fajita Pizza (L)"
}
]
}]
},
{
"ID": 1084,
"Name": "beverages",
"Description": null,
"Image": null,
"StatusID": 1,
"LocationID": 2112,
"Subcategories": []
}
],
"description": "Success",
"status": 1
}
What i need to do know is show items of all arrays. Mean in above data there are 2 arrays in subcategories and in 1 array there are 3 items. I need to merge all items of array 1 and 2 so it can total 6.
Expecting output
{ "Items": [
{
"ID": 1195,
"SubCategoryID": 87,
"Name": "Fajita Pizza (S)",
},
{
"ID": 1196,
"SubCategoryID": 87,
"Name": "Fajita Pizza (M)",
},
{
"ID": 1197,
"SubCategoryID": 87,
"Name": "Fajita Pizza (L)",
},
{
"ID": 1195,
"SubCategoryID": 87,
"Name": "Fajita Pizza (S)",
},
{
"ID": 1196,
"SubCategoryID": 87,
"Name": "Fajita Pizza (M)",
},
{
"ID": 1197,
"SubCategoryID": 87,
"Name": "Fajita Pizza (L)",
}
]
}
Upvotes: 1
Views: 1774
Reputation: 193
dynamic data = {
"Categories": [
{
"ID": 1064,
"Name": "Pizza",
"Subcategories": [
{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [
{"ID": 1195, "Name": "Fajita Pizza (S)"},
{"ID": 1196, "Name": "Fajita Pizza (M)"},
{"ID": 1197, "Name": "Fajita Pizza (L)"}
]
},
{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [
{"ID": 1195, "Name": "Fajita Pizza (S)"},
{"ID": 1196, "Name": "Fajita Pizza (M)"},
{"ID": 1197, "Name": "Fajita Pizza (L)"}
]
}
]
},
{
"ID": 1064,
"Name": "Pizza",
"Subcategories": [
{
"ID": 87,
"CategoryID": 1064,
"CategoryName": "Pizza",
"Items": [
{"ID": 1195, "Name": "Fajita Pizza (S)"},
{"ID": 1196, "Name": "Fajita Pizza (M)"},
{"ID": 1197, "Name": "Fajita Pizza (L)"}
]
}
]
},
{
"ID": 1084,
"Name": "beverages",
"Description": null,
"Image": null,
"StatusID": 1,
"LocationID": 2112,
"Subcategories": []
},
null
],
"description": "Success",
"status": 1
};
var items = List();
var categories = data["Categories"];
categories.forEach((element) {
if (element == null) return;
List subCategories = element['Subcategories'];
subCategories.forEach((element) {
items.add(element["Items"]);
});
});
items = items.expand((element) => element).toList();
print(items);
Upvotes: 0
Reputation: 4509
You can use forEach to split the json data layer by layer
var items = {'Items':[]};
if(map['Categories'] != null){
map['Categories'].forEach((category){
if(category['Subcategories'] != null){
category['Subcategories'].forEach((subcategory){
items['Items'].addAll(subcategory['Items']);
});
}
});
}
print(items);
Upvotes: 0
Reputation: 98
hope these steps help you:
Upvotes: 0
Reputation: 215
I don't know if I understand what you want to do but you can try the addAll function
fetchedList = [a, b, 2, 3];
myList = [4, 5, c];
fetchedList.addAll(myList);
print(fetchedList);
// [a, b, 2, 3, 4, 5, c]
Upvotes: 1