【问题标题】:How do I import my JSON array into Firebase as a FirebaseArray?如何将我的 JSON 数组作为 FirebaseArray 导入 Firebase?
【发布时间】:2017-05-16 12:17:03
【问题描述】:

我有一个包含数组的大型 JSON 文件。我正在为我的应用程序的后端使用 Firebase,并且我想使用 FirebaseArray 来存储数据。

从我的 Angular 应用程序创建一个 FirebaseArray 并向其中添加数据很简单,但我的应用程序的本质是我已经获取了需要首先以某种方式导入 Firebase 的数据。

在 Firebase 网站上,唯一的导入选项是从 JSON。当我导入我的 JSON 文件时,结果是一个带有数字键的对象,我意识到它就像一个数组,但有一个主要问题。

{
  "posts": {
    "0": {
      "id": "iyo0iw",
      "title": "pro patria mori"
    },
    "1": {
      "id": "k120iw",
      "title": "an english title"
    },
    "2": {
      "id": "p6124w",
      "title": "enim pablo espa"
    }
  }
}

用户可以更改物品的位置,物品的位置也是唯一标识物品的方式。对于多个用户,这意味着可能会出现以下问题。

  • 莎拉:将帖子[0] 标题更改为“大家好”
  • Trevor:将 post[1] 位置与 post[2] 交换
  • Sarah:将帖子[1] 标题更改为“这是索引 1 处的帖子,对吧?”

如果在短时间内发生以下操作,Firebase 无法确定 Sarah 在更改标题时看到的帖子[1],也无法确定要更新哪个帖子对象。

我想要的是一种导入我的 JSON 文件并使数组变为 FirebaseArrays 的方法,而不是带有数字键的对象,它们类似于数组并共享上述问题。

【问题讨论】:

    标签: angularjs arrays json firebase firebase-realtime-database


    【解决方案1】:

    实际上,您导入数据库的内容是一个数组。 Firebase 实时数据库仅将数据真正表示为键/值对的嵌套层次结构。数组只是一组键/值对,其中键都是数字,通常从 0 开始。这正是您在问题中显示的结构。

    【讨论】:

    • 是的,我知道从技术上讲这是一个数组,但我的问题专门询问 FirebaseArray,它们是具有唯一 ID 作为键的特殊对象。因为多人可能会更改日期(并且可以更改项目的位置)数组对我的应用程序来说是个坏主意。在此处阅读更多信息:firebase.googleblog.com/2014/04/…
    • 听起来您只需要在每个帖子中使用另一个字段来确定其相对于“帖子”下其他子项的顺序。您可以使用 orderByChild 查询该订单。在这种情况下,孩子的索引/键根本不重要,因为其他值决定了显示顺序。
    【解决方案2】:

    要生成将通过使用 AngularFire FirebaseArray 写入数据库来创建的那种数据,您需要对 JSON 进行预处理。

    Firebase 推送 ID 在客户端生成,您可以通过不带参数调用 push 来生成一个。

    您可以使用 Firebase 推送 ID 键将数组转换为对象,如下所示:

    let arr = ["alice", "bob", "mallory"];
    let obj = arr.reduce((acc, val) => {
      let key = firebase.database().ref().push().key;
      acc[key] = val;
      return acc;
    }, {});
    

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多