如何将我的JSON数组作为FirebaseArray导入Firebase?

时间:2017-01-02 11:29:46

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

我有一个包含数组的大型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:以帖子[2]
  • 交换帖子[1]
  • 莎拉:将帖子[1]标题改为“这是索引1的帖子对吗?”

如果以下操作在很短的时间内发生,Firebase无法确定Sarah在更改标题时看到的帖子[1],并且无法确定要更新的帖子对象。< / p>

我想要的是一种导入我的JSON文件并使数组成为FirebaseArrays的方法,而不是具有数字键的对象,它们就像数组一样,并且共享上述问题。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

要生成通过使用AngularFire FirebaseArray写入数据库而创建的数据类型,您需要预处理JSON。

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

您可以使用Firebase推送ID ID将数组转换为对象:

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