我需要使用动态数组键解析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:...}]
创建“事件”列表并将其显示在卡片列表中。
答案 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);
});
}