如何使用 Flutter 将复杂的 JSON 数据存储到 Firebase 实时数据库中

Posted

技术标签:

【中文标题】如何使用 Flutter 将复杂的 JSON 数据存储到 Firebase 实时数据库中【英文标题】:How to store complex JSON data into the firebase realtime database using flutter 【发布时间】:2020-03-22 14:38:16 【问题描述】:

我是 Flutter 的新手,我正在尝试处理复杂的 json 结构,但我不知道如何使用 flutter 将复杂的 JSON 数据存储到 firebase 实时数据库中。这里我也附上了我的 JSON 结构和数据模型类结构.有没有相关的文章或教程。

JSON Structure:

  "users": 
    "John@gmail.com": 
      "name": "John Doe",
            "Country": "United Kingdom",
        "verified_phone": true,
        "ID_verification": False,
    ,
      "Properties": 
        "Properties":[ 
        "propertiename":"Hilton_Common",
                        "Role" : "owner",
    "propertiename":"Carraige_guest_house",
                        "Role" : "staff",
            
    ....
    ....
    ],
      "Reservations": 
    "Properties": [
         "propertiename":"Hilton_Common"
                        "Guest" : "Primary_guest",
    "propertiename":"Carraige_guest_house"
                        "Guest" : "Aditional",
        
    ....
    ....
    ],
          

User model:

class User 
  String key;
  final List<Host> host;
  final List<User_Reservation> reservation;
  String nameformlogin, phone, email;
  String verifiedphone, idverification;
  var list;
  User(
    this.key,
    this.nameformlogin,
    this.phone,
    this.email
    this.verifiedphone,
    this.idverification,
    this.host,
    this.reservation,

  );

  factory User.fromJson(Map<String, dynamic> json) 

    return new User(
        nameformlogin: json["nameformlogin"],
        phone: json["phone"],
        email: json["email"],
        verifiedphone: json["verifiedphone"],
        idverification: json["idverification"],
        host: json["host"],
        reservation:json["reservation"]
        );
  

  toJson() 
    return 
        'name': nameformlogin,
        'county':phone,
        'email': email,
        'verifiedphone':verifiedphone,
        'idverification':idverification,
        'host':host,
    'reservation':reservation

    ;
      

class Host 
  String propertiesname, role;
  Host(this.propertiesname, this.role);
  factory Host.fromJson(Map<String, dynamic> json) 
    return new Host(propertiesname: json['propertiesname'], role: json['role']);
  

class User_Reservation 
  String propertiesname, guest;
  User_Reservation(this.propertiesname, this.guest);
  factory User_Reservation.fromJson(Map<String, dynamic> json) 
    return new User_Reservation(
        propertiesname: json['propertiesname'], guest: json['guest']);
  

【问题讨论】:

【参考方案1】:

创建实时数据库 (rtd) 参考实例, 将数据存储为键值:

void storeData
      dataBaseRef.child(user.key).set(
         "name":user.name,
         "host":user.host,
         ...
      );

如果你不知道如何连接和创建 RTD 的参考,你可以参考这个youtube tutorial

【讨论】:

变量名没有问题。这是一个简单的字符串变量,我可以将它存储在数据库中。这里的实际问题例如:主机是一个复杂变量的数组,具有结构------ class Host String propertiesname, role;主机(this.propertiesname,this.role);工厂 Host.fromJson(Map json) return new Host(propertiesname: json['propertiesname'], role: json['role']); ................................................. ......请您提供有关如何存储复杂变量(类中的类)的建议吗? @feathersoft 当您使用 user.host(类中的类)存储主机对象数组时,它将成功存储,您是否使用上述代码尝试过一次? @sumeetJain,我试过但无法保存。但它没有用。您是否有任何示例代码用于在另一个类中保存诸如 类的数据? @feathersoft 我现在遇到了问题,您需要在列表 上运行一个循环,在列表 中创建对象的所有属性的键值对,然后添加到具有唯一索引的 RTD。这可能会帮助你***.com/questions/55034729/… @sumeetJain,你有处理复杂类的flutter代码吗

以上是关于如何使用 Flutter 将复杂的 JSON 数据存储到 Firebase 实时数据库中的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter的sqlite数据库中保存嵌套的复杂JSON数据

在 Flutter 中编码/解码复杂的 Json

Flutter:如何解析超复杂的 json 文件?

Flutter Hive:处理复杂 json 的多个类

如何在 dart/flutter 中解码复杂的 json?

在Flutter中解析复杂的JSON