Как использовать данные json, которые я получаю от MongoDB во flutter?

#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. Это эквивалентно переменной ответа, как указано в вопросе