#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 (ужасная идея), и каким-то образом в последнем обновлении все перепутано. Сейчас я не могу открыть ни одного файла. Я приму это как можно скорее. 🙁