【问题标题】:How to parse a json with dynamic array'keys?如何使用动态数组的键解析 json?
【发布时间】:2019-06-10 08:46:55
【问题描述】:

我需要用这样的动态数组键解析 json:

[{ key1:{ 标题: ....., 图:……, },键2:{ 标题: ....., 图:……, }, }]

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

[ {标题:.....,nbLike:...}, {标题:....,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: ...}]

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

【问题讨论】:

    标签: json dart flutter


    【解决方案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,
        );
      }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个。

      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);
        });
      }
      

      【讨论】:

      • 我对 jsonParsed.keys 有这个错误:[dart] 没有为类 'List' 定义 getter 'keys'。 [undefined_getter]
      • 将 paredJson 改成 Map 类型
      • 我改了,但是 foreach 不能接​​受 key 作为字符串,所以我改成动态的。代码不显示错误,但颤振给了我这个错误:类型“列表”不是“地图”类型的子类型,对不起,我是颤振的新手
      • 地图 jsonParsed = {};尝试这个。我工作过类似类型的 json 格式。我首先将键存储在列表中,然后使用存储在列表中的键提取详细信息
      猜你喜欢
      • 1970-01-01
      • 2014-12-22
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2020-03-23
      相关资源
      最近更新 更多