#json #flutter
#json #флаттер
Вопрос:
У меня есть файл json с 40 000 записей ок. Я пытаюсь проанализировать его в своем приложении flutter. я получаю json и успешно конвертирую его в желаемую модель. Но проблема в том, что загрузка занимает слишком много времени. Мой файл json хранится в хранилище Firebase. Есть ли какой-либо другой способ, чтобы он мог быстро загружаться? Я думал о сохранении данных в базе данных реального времени, но я уверен, что и там это быстро даст результаты или нет. Любые предложения были бы очень полезны.
class CollegeCode {
final String college_code;
final String studentcode;
final String college_Name;
final String college_Location;
CollegeCode({this.college_code, this.college_Name, this.college_Location, this.studentcode});
factory CollegeCode.fromJson(Map<String, dynamic> json) =>
CollegeCode(
college_code: json['College Code'] ,
college_Location: json['Location'],
college_Name: json['College Name'],
studentcode: json['Student Code']
);
}
class GetList{
GetList({this.data});
List<CollegeCode> data;
factory GetList.fromJson(Map<String, dynamic> json) {
// print(json['CollegesList'].toString());
if(json != null){
return GetList(
data: List<CollegeCode>.from(
json["CollegesList"].map((x) => CollegeCode.fromJson(x))).toList() ?? [],
);
}
return GetList(data: []);
}
}
Future <List<CollegeCode>> parsePhotos(String responseBody) async{
if(responseBody.isNotEmpty) {
final parsed = await GetList.fromJson(json.decode(responseBody));
final datalist = parsed.data.toList();
return datalist;
}
}
Future<List<CollegeCode>> fetchPhotos(http.Client client) async {
final response =
await client.get(url of file in storage bucket');
// print(response.body);
return parsePhotos(response.body);
// return compute(parsePhotos, response.body);
}
Я хочу знать, есть ли какая-либо альтернатива тому, чтобы сделать то же самое.
Ответ №1:
Не ожидайте, что 40 000 записей будут обрабатываться мгновенно. Если вы хотите использовать локальную базу данных, пакет sqflite отлично подходит для этой цели, поскольку он даже предоставляет пакеты, в которых большие объемы информации могут быть обработаны за более короткое время, хотя и с затратами памяти.
Кроме того, вы можете проверить, подпадает ли объем обрабатываемой вами информации под эти параметры
Комментарии:
1. я не знаком с пакетом sqflite. я обязательно проверю это. Я хочу знать, есть ли какая-либо замена этому. так что мне не нужно анализировать такое количество записей сразу.
Ответ №2:
Вы уверены, что это декодирование, которое требует времени по сравнению с передачей этого гигантского файла по проводам?
Комментарии:
1. Я не уверен в этом. Я использую future builder для доступа к данным. Я добавил фрагмент, как я и пытаюсь это сделать.
2. В вашем фрагменте нет красных флажков. Итак, что бы я сделал, это напечатал там информацию о времени, чтобы точно определить, какая часть принимает большее участие. Что-то вроде этого:
final stopwatch = Stopwatch()..start(); <...expansive operation...>; print('done in ${stopwatch.elapsed}');
. Так что, по крайней мере, вы можете выяснить, убивает ли вас обход сервера или синтаксический анализ json.