如何使用 SQFLite 或 Moor 库将 JSON 数据存储到颤振中的数据库表中

Posted

技术标签:

【中文标题】如何使用 SQFLite 或 Moor 库将 JSON 数据存储到颤振中的数据库表中【英文标题】:How to store JSON data into database table in flutter using SQFLite or Moor Library 【发布时间】:2019-11-30 05:16:09 【问题描述】:

如何在flutter应用程序中插入数据库中的字符串列表,我尝试通过将json数组编码到字符串中来将其保存为字符串数据类型,但是技能数组每次都需要显式解码,如下所示每当我需要从数据库返回对象。

List<User> userResponse = await tempDatabase.allItems;
      jsonData = Result.fromJson(
        "name": userResponse[0].name,
        "skills": jsonDecode(userResponse[0].skills)
      );

这是我的 json 响应


  "result": [
    
      "name":"Sidhant Rajora",
      "skills": [
        "C++",
        "Java",
        "Python",
        "React"
      ]
    ,
    
      "name":"Adity Rajora",
      "skills": [
        "C++",
        "Java",
        "Python"
      ]
    
  ]

我有这种JSON响应,它创建的模型PODO就像

class UsersJson 
  List<Result> result;

  UsersJson(this.result);

  UsersJson.fromJson(Map<String, dynamic> json) 
    if (json['result'] != null) 
      result = new List<Result>();
      json['result'].forEach((v) 
        result.add(new Result.fromJson(v));
      );
    
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.result != null) 
      data['result'] = this.result.map((v) => v.toJson()).toList();
    
    return data;
  


class Result 
  String name;
  int id;
  List<String> skills;

  Result(this.name, this.skills);

  Result.fromJson(Map<String, dynamic> json) 
    name = json['name'];
    skills = json['skills'].cast<String>();
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['name'] = this.name;
    data['skills'] = this.skills;
    return data;
  

现在我不确定将模型插入数据库并从数据库中取回的方法。 我尝试过使用 SQFLite 库和 Moor 库(https://moor.simonbinder.eu)

【问题讨论】:

你解决了吗? 目前我选择了无 sql 数据库。 @SidhantRajora:我可以知道你在 Flutter 中使用的是哪个 NoSQL 数据库吗? sembast pub.dev/packages/sembast 您能分享一下您是如何解决这个问题的吗? 【参考方案1】:

在 moor 中,您可以使用 TypeConverter。将任何类型转换为受支持的停泊柱类型。例如,您可以将 json 字符串化并将其存储在 TextColumn 中。 See the docs for how to。但是对于深度嵌套的 json 数据,编码和解码可能会有点棘手。

【讨论】:

我有 TypeConverter 的概念并按照教程进行操作,但我无法存储和检索数据,即我无法为其编写查询。你能帮忙吗?【参考方案2】:

我在学习 Flutter、SQLite、Moor 等时遇到了类似的问题。我能看到对我有用的唯一解决方案是加入两个单独的表,一个表包含名称和 ID,另一个包含两种 ID,每个技能一个唯一标识符,一个链接一堆的“分组”ID其中的第一张桌子。因此,对于您的情况,它应该是这样的:

【讨论】:

我很了解连接和外键,但是我要存储的数据是 json 格式,并且具有复杂的结构,包含嵌套对象和数组,在这种情况下创建表并且记录插入和获取会更难。

以上是关于如何使用 SQFLite 或 Moor 库将 JSON 数据存储到颤振中的数据库表中的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何使用SQFlite存储的数据?

如何在flutter中将图像数据保存到sqflite数据库以进行持久化

如何通过 Node JS 使用自己的库将联系人添加到 Mailchimp 中的列表/受众

如何在 Flutter 中使用 sqflite 插入特殊字符?

Flutter项目WanWan之数据库moor

Flutter项目WanWan之数据库moor