Umaiz Khan
Umaiz Khan

Reputation: 1227

Flutter how to merge arrays

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

Answers (4)

Furkan Aydın
Furkan Aydın

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

yellowgray
yellowgray

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

Moussa Kare Gueye
Moussa Kare Gueye

Reputation: 98

hope these steps help you:

  1. Create a new empty map
  2. Loop in your map data['Categories']['Subcategories']
  3. Put each element in your new map

Upvotes: 0

Baran Gungor
Baran Gungor

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

Related Questions