Оптимальный синтаксический анализ большого JSON в фоновом режиме

#json #dart #flutter

#json #dart #флаттер

Вопрос:

Я анализирую большие данные JSON, похожие на один такой.

Здесь более 3000 chapter объектов. Мне требуются только те chapter объекты с "lang_code":"gb" , которых будет около 1300 с некоторыми базовыми объектами, такими как title , description . Таким образом, в основном 55% JSON не для моего использования.

Я создаю классы для синтаксического анализа JSON с помощью https://app.quicktype.io / который дает мне правильные классы, но этот метод слишком медленный.

Любые предложения по его ускорению.

Ответ №1:

Если большая часть необходимой вам информации разрежена, вероятно, лучше выбирать ее целенаправленным образом, а не создавать объекты для всего.

Вы не можете обойти декодирование всей строки json, что занимает около 60 мс на моем ноутбуке. Сокращение разделов, отличных от гб, занимает всего несколько мс, а сопоставление того, что осталось, с некоторыми полезными объектами, занимает еще несколько мс. Общее время до чего-либо полезного: <70 мс.

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

Комментарии:

1. спасибо за помощь; протестирую это как можно скорее и дам вам знать. В приложении flutter для полного синтаксического анализа JSON потребовались минуты.

2. Извините, не удалось проверить ответ. Я обновил как WebStorm, так и IDE IntelliJ IDEA (ужасная идея), и каким-то образом в последнем обновлении все перепутано. Сейчас я не могу открыть ни одного файла. Я приму это как можно скорее. 🙁