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

Angularjs 如何将JSON数组作为FirebaseArray导入Firebase?,angularjs,arrays,json,firebase,firebase-realtime-database,Angularjs,Arrays,Json,Firebase,Firebase Realtime Database,我有一个包含数组的大JSON文件。我正在使用Firebase作为我的应用程序的后端,我想使用FirebaseArray来存储数据 从我的Angular应用程序创建FirebaseArray并向其中添加数据很简单,但我的应用程序的本质是我已经获取了数据,我需要首先以某种方式导入Firebase 在Firebase网站上,导入的唯一选项是来自JSON。当我导入JSON文件时,结果是一个带有数字键的对象,我意识到它就像一个数组,但有一个主要问题 { "posts": { "0": {

我有一个包含数组的大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]标题改为“大家好”
  • 特雷弗:将立柱[1]位置与立柱[2]互换
  • 莎拉:把帖子的标题改为“这是索引1的帖子,对吗?”
如果以下操作在短时间内发生,Firebase不知道Sarah在更改标题时看到了什么帖子[1],也不知道更新哪个帖子对象


我想要的是一种方法来导入我的JSON文件,让数组变成,而不是带有数字键的对象,它们类似于数组,并且与上面描述的问题相同。

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

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

Firebase推送ID是在客户端上生成的,您可以通过调用
push
而无需参数来生成一个推送ID

您可以将数组转换为具有Firebase push ID键的对象,如下所示:

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

是的,从技术上来说,我知道这是一个数组,但我的问题专门询问FirebaseArray,它是具有唯一id作为键的特殊对象。因为多个人可能会改变日期(并且可以改变项目的位置),所以阵列对我的应用程序来说是个坏主意。在这里阅读更多信息:听起来您只需要在每个帖子中添加另一个字段,以确定其相对于“posts”下其他子项的顺序。您可以使用orderByChild查询该订单。在这种情况下,子项的索引/键根本不重要,因为另一个值决定了显示顺序。