json - 后台大JSON优化解析

标签 json dart flutter

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

这里有大约 3000 多个章节对象。我只需要那些带有 "lang_code":"gb"chapter 对象,这些对象大约有 1300 个,还有一些基本对象,如 title描述。所以基本上 55% 的 JSON 不适合我使用。

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

任何加快速度的建议。

最佳答案

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

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

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

关于json - 后台大JSON优化解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55507988/

相关文章:

Flutter 嵌套行 MainAxisAlignment

flutter - 我无法向您的应用添加耀斑闪屏

flutter - 如何从 QuerySnapshot 中获取特定文档的 DocumentSnapshot?

ios - 如何让 iOS 模拟器在 macOS 中始终保持领先

flutter - 为什么热重启时构建函数会被调用两次?

php - 在保留数组的同时使用 PHP 将 XML 转换为 JSON

json - 如何解码从请求返回的 JSON?

javascript - jQuery .data(),需要接受数组元素作为键或找到替代方案(JSON?)

javascript - 如何从脚本页面返回json数据?

ios - Flutter 登录苹果失败