'Decode complex json in flutter/dart

Could someone help me with decode this json and also access the variables?

{
  "data" : [
     "items": {
                "388488": {
                    "id": 388488,
                    "name": "Galaxy Tab A7 10.4 2020",
                    "qty": 1,
                },
                "388489": {
                    "id": 388489,
                    "name": "Samsung Galaxy Tab A7 10.4 2020",
                    "qty": 1,
                },
                "388490": {
                    "id": 388490,
                    "name": " Apple iPad 10.2",
                    "qty": 1,
                }
            }
       ]
 }

Note : the 388488 , 388489 and 388490 aren't stable and in other items can be different so i cant create a variable and name it something specific in model class.

here is my model class:

class OrderPageModel{
  late final List<OrderPageModelData> orderpagemodeldata;

  OrderPageModel({
   required this.orderpagemodeldata
});

  factory OrderPageModel.fromJson(Map<String , dynamic>Json ){
    var list = Json["data"] as List ;
    List<OrderPageModelData> dataList = list.map((e) => OrderPageModelData.fromJson(e)).toList();
    return OrderPageModel(
      order_id: Json['order_id'],
        orderpagemodeldata: dataList
    );
  }
}

class OrderPageModelData{
  late Items items;
  
  OrderPageModelData({
   required this.items 
});
  factory OrderPageModelData.fromJson(Map<String , dynamic> Json ){
    return OrderPageModelData(
        items: Items.fromJson(Json['items'])
    );
  }
}

class Items{
  late final id;
  late final name;
  late final quantity;

  Items({
   this.id,
   this.name,
   this.quantity,
});
  
  
  factory Items.fromJson(Map<String , dynamic> Json){
    return Items(
      id: Json["id"],
      name: Json["name"],
      quantity: Json["qty"]
    );
  }

}

and here is how i decode it:

if(response.statusCode == 200){
      var decodedResponse = jsonDecode(response.body);
      orderPageModel = OrderPageModel.fromJson(decodedResponse);

      for(var i in orderPageModel.orderpagemodeldata){
        print(i.items.name);

      }
    }

when I run my codes what I get is null it mean the name of item isn't define and idk what is wrong with me codes. Also when I run print(i.items) it will return Instance of Items. Could anyone help me how to fix this?



Solution 1:[1]

Your Json['items'] is a JSON object. You cannot directly map it to Items (whose name counterintuitively implies it represents multiple items, which is not the case), but to Map<String, dynamic>. From there, you can iterate through it (using the entries property), and pass each value to Items.fromJson.

Also, your JSON is invalid, as it is.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Riwen