Мне нужно объединить вложенный json с простым json в dart flutter

#json #flutter

#json #flutter

Вопрос:

Мне нужно объединить вложенный json с простым json вот ответ от API

 {
  "1": [
    {
      "id": 6,
      "name": "test 1"
    },
    {
      "id": 8,
      "name": "test 2"
    },
    {
      "id": 7,
      "name": "test 3"
    }
  ],
  "2": [
    {
      "id": 9,
      "name": "ttt1"
    },
    {
      "id": 5,
      "name": "ttt3"
    }
  ],
  "3": [
    {
      "id": 4,
      "name": "ttg"
    
    }
  ]
}
 

То, что мне нужно, это

 [
  {
    "id": 4,
    "name": null
  },
  {
    "id": 6,
    "name": null
  },
  {
    "id": 8,
    "name": null
  },
  {
    "id": 9,
    "name": null
  },
  {
    "id": 5,
    "name": null
  },
  {
    "id": 7,
    "name": null
  }
]
 

Вот моя модель

 class HomeBannerModel {
  int id;
  String name;

  HomeBannerModel({this.id, this.name});

  HomeBannerModel.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    image = json['name'];
  
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['name'] = this.name;
  
    return data;
  }
}
 

ИТАК, вот моя часть цикла

 var responseList = response.data['data'];

    if (response.data['success'] == true) {
      List data = [];
      responseList.forEach((k, v) {    
        var value =
            v.map((banner) => HomeBannerModel.fromJson(banner)).toList();    
        data.add(value);
      });
      print(data);
 

но я получаю сообщение об ошибке, так как ‘length’ был вызван для null. итак, дайте мне знать, чего мне не хватает, поскольку я перехожу к dart, api выдает числовой ключ в качестве ключа, поэтому я сталкиваюсь с трудностями при получении данных

Комментарии:

1. Ваше «значение» — это объект списка, поэтому вы должны использовать «data.addAll (value)». Именно так вы получите желаемый результат

Ответ №1:

Может быть, вы можете попробовать это

 List<HomeBannerModel> data = [];
responseList.forEach((key, value) {
  value.forEach((element) {
    data.add(HomeBannerModel.fromJson(element));
  });
});