如何使用动态array'keys解析json?

时间:2019-01-16 09:39:49

标签: json dart flutter

我需要使用动态数组键解析json:

  

[{key1:{            标题:...,            img:.....,           },key2:{            标题:...,            img:.....,           },}]

我知道如何解析这样的json:

  

[       {title:.....,nbLike:...},       {title:....,nbLike:...}       ]

但是我没有找到任何有关像这样的动态键解析json的信息。

我尝试了这个,但是没有用。

class Event {
  final String title;
  final int nbLike;

 Event({this.title, this.nbLike});

  factory Event.fromJson(Map<String, dynamic> json) {
    return Event(
      title: json['title'] as String,
      nbLike: json['nbLike'] as int,
    );
  }
}




Future<List<Event>> fetchPosts(http.Client client) async {
  final response = '[{"2019-01-15":{"title":"Hey","nbLike":1}, "2019-01- 
 16":{"title":"Hey2","nbLike":2}}]';


  return compute(parsePosts, response);
}

List<Event> parsePosts(String responseBody) {
   List<Event> events = new List<Event>();
    List jsonParsed = json.decode(responseBody.toString());
    for (int i = 0; i < jsonParsed.length; i++) {
      print('jsonParsed1 ${jsonParsed.length}');
      print('jsonParsed ${jsonParsed[i]}');
      events.add(new Event.fromJson(jsonParsed[i]));
    }
    return events;
}

我从API接收到带有密钥的json,我想将其转换为

  

[{title:.....,nbLike:...},{title:....,nbLike:...}]

创建“事件”列表并将其显示在卡片列表中。

2 个答案:

答案 0 :(得分:1)

如果有人需要,它是完整的代码,谢谢KURRU HEM。

    Map<String, dynamic> jsonParsed = {"2019-01-15":{"title":"Hey","nbLike":1}, "2019-01-16":{"title":"Hey2","nbLike":2}};
    print(jsonParsed);
 List<Event> _events = [];
List _dates = [];
jsonParsed.keys.forEach((String key){
   _dates.add(key);
});
  print(_dates);
for(int i=0; i<_dates.length; i++){
  print(jsonParsed[_dates[i]]['title']);
  print(jsonParsed[_dates[i]]['nbLike']);
   final Event event = Event(
      title: jsonParsed[_dates[i]]['title'],
      nbLike: jsonParsed[_dates[i]]['nbLike'],
);
    _events.add(event);
}
print('EVENTS --------------> $_events');


class Event {
  final String title;
  final int nbLike;

 Event({this.title, this.nbLike});

  factory Event.fromJson(Map<String, dynamic> json) {
    return Event(
      title: json['title'] as String,
      nbLike: json['nbLike'] as int,
    );
  }
}

答案 1 :(得分:0)

尝试一下。

List _events = [];
List _dates = [];
jsonParsed.keys.forEach((String key){
   _dates.add(key);
});
for(int i=0; i<_dates.length; i++){
  jsonParsed[_date[i]].forEach((event){
   final Event event = Event(
      title: jsonParsed['title'],
      nbLike: jsonParsed['nbLike'],

    );
    _events.add(event);
  });
}
相关问题