2017-01-02 29 views
1

我有一个包含数组的大型JSON文件。我为我的应用的后端使用Firebase,并且我想使用FirebaseArray来存储数据。如何将我的JSON数组作为FirebaseArray导入到Firebase中?

从我的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]标题为“这是在索引1右后?“

如果以下行为发生在很短的时间内,Firebase并不确定Sarah在更改标题时看到的帖子[1],并且无法确定哪些帖子对象更新。

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

回答

1

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

+0

是的,我知道这是一个阵列技术,但我的问题专门询问FirebaseArray的,这是具有独一无二的特殊对象身份证的关键。因为多人可能会改变一天(并且可以改变项目的位置),所以对于我的应用来说,数组是一个坏主意。在此处阅读更多信息:https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html –

+0

我已更新问题以使其更清晰。 –

+0

这听起来像你只需要在每个职位中的另一个领域,它决定了相对于'职位'下的其他孩子的顺序。您可以使用orderByChild查询该订单。在这种情况下,孩子的索引/键并不重要,因为其他值决定了显示顺序。 –

1

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

Firebase推送ID在客户端上生成,您可以通过调用push而不带参数来生成一个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; 
}, {}); 
相关问题