2015-11-23 95 views
1

我有一個存儲在Firebase中設置的社區。因爲我在Swift項目中定義了一個類,所以在從中生成對象時,我需要知道它是數組還是字典。當從Firebase接收陣列/字典時

我下載了JSON文件,它看起來像這樣 - 2個用戶存儲在不同的數據格式在火力爲相同的「表」:

[{"user": { 
    "User1": { 
     "adminOf": { 
      "3": true, 
      "5": true 
     }, 
     "alias": "borussenpeter", 
     "communities": { 
      "3": true, 
      "5": true 
     } 
    }, 
    "User2": { 
     "adminOf": [null, true, true, null, true], 
     "alias": "burkart", 
     "communities": [null, true, true, null, true] 
    } 
}}] 

我嘗試下載該文件,修改它,以便這兩個用戶看起來相同並再次上傳,但Firebase以這種方式再次保存。

當使用錯誤的數據類型時,初始化對象失敗。對此有何想法?感謝

回答

3

答案是在Firebase documentation on arrays

但是,以幫助那些存儲在數據庫火力地堡開發商的陣列,...如果數據看起來像一個數組,火力地堡客戶端將呈現爲一個數組。 特別是,如果所有鍵都是整數,並且對象中0和最大鍵之間的鍵的一半以上都有非空值,那麼Firebase客戶端會將其呈現爲數組。

在用戶1的JSON中,對於5個索引有2個值(3和5)。這少於鍵的一半,所以Firebase不會將其呈現爲數組。

在用戶2的JSON中,您有3個值(2,3和5)用於5個索引。這是超過一半的密鑰,因此Firebase將其呈現爲一個數組。

一些方法來解決這個問題:

  • 前綴字符串整數,例如"group3": true
  • 向「數組」添加一個虛擬非整數:例如"NOTUSED": false
  • 所有指數的商店價值:例如"group0": false
+0

非常感謝! – Burkart

+0

我的首選解決方法是添加以下鍵和值:'renderAsArray:false'。這仍然是一個黑客攻擊,但它更像是一個功能。 :) – Pim

0

數據如何顯示在火力地堡直接關係到它是如何存儲在火力地堡。

我的猜測是,當用戶2寫入firebase時,鍵被丟失,因此它將它們寫入數組。

+0

我想出口,編輯,導入將然後解決這個問題?我試過但沒有工作。 – Burkart