#node.js #json #mongodb #flutter #parsing
#node.js #json #mongodb #трепетание #синтаксический анализ #flutter
Вопрос:
Я хочу использовать данные json, которые я получаю от mongodb, для моего клиента flutter.
Формат моего документа mongodb:
{
"_id":"2020-10-10 18:35:19.465085",
"classhours":"56",
"sleephours":"56",
"studyhours":"56",
"activity":"9.0"
}
Я могу извлекать такие данные:
db = await mongo.Db.create(
"mongodb srv://id:pass@cluster0.qkmvt.mongodb.net/students?retryWrites=trueamp;w=majority");
await db.open();
print('DB Connected');
coll = db.collection(widget.uid);
print(coll);
var response = await coll.find();
print(response);
Я могу распечатать все документы в консоли, используя это. Как использовать ответ в клиентском интерфейсе, например, для текста.Кто-нибудь может мне помочь с этим?
Ответ №1:
Вы можете использовать виджет FutureBuilder для установки текстового виджета со значением, которое вы получаете от асинхронных вызовов.
Для получения дополнительной информации см.: https://flutter.dev/docs/cookbook/networking/fetch-data
Ответ №2:
Вы можете преобразовать ответ JSON в карту. Вот пример
import 'dart:convert';
void main() {
var db="{"_id":"2020-10-10 18:35:19.465085",rn"classhours":"56", rn "sleephours":"56",rn"studyhours":"56",rn"activity":"9.0"rn}";
Map<String, dynamic> db_map=jsonDecode(db);
print(db_map['_id']);
}
Или вы можете сделать простой старый объект Dart из ответа, используя Quicktype. Вот что вы получите
// To parse this JSON data, do
//
// final dbModel = dbModelFromJson(jsonString);
import 'dart:convert';
DbModel dbModelFromJson(String str) => DbModel.fromJson(json.decode(str));
String dbModelToJson(DbModel data) => json.encode(data.toJson());
class DbModel {
DbModel({
this.id,
this.classhours,
this.sleephours,
this.studyhours,
this.activity,
});
DateTime id;
String classhours;
String sleephours;
String studyhours;
String activity;
factory DbModel.fromJson(Map<String, dynamic> json) => DbModel(
id: DateTime.parse(json["_id"]),
classhours: json["classhours"],
sleephours: json["sleephours"],
studyhours: json["studyhours"],
activity: json["activity"],
);
Map<String, dynamic> toJson() => {
"_id": id.toIso8601String(),
"classhours": classhours,
"sleephours": sleephours,
"studyhours": studyhours,
"activity": activity,
};
}
После получения ответа просто используйте
DbModel model=DbModel.fromJson(json.decode(db));
print(model._id); // Access whatever variables you want
РЕДАКТИРОВАТЬ 1: в моем примере я жестко запрограммировал ответ как строковую переменную db. Это эквивалентно переменной ответа, как указано в вопросе