【问题标题】:Optimal parsing of large JSON in background后台大JSON的优化解析
【发布时间】:2019-08-25 17:45:47
【问题描述】:

我正在解析类似于one like this 的大型 JSON 数据。

这里有大约 3000 多个 chapter 对象。我只需要带有"lang_code":"gb" 的那些chapter 对象,对于一些基本对象,如titledescription,它们将在1300 左右。所以基本上 55% 的 JSON 不适合我使用。

我正在使用https://app.quicktype.io/ 生成用于 JSON 解析的类 这给了我正确的课程,但这种方法太慢了。

任何加快速度的建议。

【问题讨论】:

    标签: json dart flutter


    【解决方案1】:

    如果您需要的大部分信息都很稀疏,那么最好有针对性地挑选出来,而不是为所有内容创建对象。

    您无法绕过解码整个 json 字符串,这在我的笔记本电脑上大约需要 60 毫秒。修剪非 gb 章节只需要几毫秒,而将剩下的内容映射到一些可用对象则需要几毫秒。可用的总时间:

    import 'dart:convert';
    import 'dart:io';
    
    main() {
      String manga = new File('manga.json').readAsStringSync();
      int t1 = DateTime.now().millisecondsSinceEpoch;
    
      Map<String, dynamic> data = json.decode(manga);
      Map<String, dynamic> jChapters = data['chapter'];
      jChapters.removeWhere((_, m) => m['lang_code'] != 'gb');
    
      Map<String, Chapter> chapters = jChapters.map((_, m) {
        String number = m['chapter'];
        return MapEntry(number, Chapter(number, m['title']));
      });
    
      int t2 = DateTime.now().millisecondsSinceEpoch;
      print(t2 - t1);
    
      print(chapters);
    }
    
    class Chapter {
      String number;
      String title;
    
      Chapter(this.number, this.title);
    
      @override
      String toString() => 'Chapter #$number:$title';
    }
    

    【讨论】:

    • 感谢您的帮助;将尽快对其进行测试并通知您。在 Flutter 应用程序中完成 JSON 解析需要几分钟时间。
    • 对不起,没能测试答案。我更新了 WebStorm 和 IntelliJ IDEA ides(可怕的想法),不知何故,在最新的更新中事情搞砸了。我现在无法打开任何文件。我会尽快接受。 :(
    猜你喜欢
    • 2012-08-26
    • 2015-02-04
    • 2015-05-15
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多