2017-01-02 33 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; 
}, {}); 
相關問題