首页 > 解决方案 > 后台大JSON的优化解析

问题描述

我正在解析类似于这样的大型 JSON数据

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

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

任何加快速度的建议。

标签: jsondartflutter

解决方案


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

您无法绕过解码整个 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';
}

推荐阅读