2012-09-26 106 views
3

我返回JSON文件看起來像這樣:如何在indexedDB中存儲JSON對象?

var data = [{"col1":"value1","col2":"value1","col3":"value1"},{"col1":"value2","col2":"value2","col3":"value2"},{"col1":"value3","col2":"value3","col3":"value3"}]; 

沒有JSON.stringify數據是這樣的:

[目標對象],[目標對象],[目標對象]

但它result.length不是5,但字符串的字符總數以及這種方式,我不能這樣做循環

var result = JSON.stringify(data); 
for(i=0; i<result.length; i++){ 
var transaction = db.transaction([STORE], IDBTransaction.READ_WRITE); 
var put = transaction.objectStore(STORE).put(result); 
}; 

回答

2
var data = [{"col1":"value1","col2":"value1","col3":"value1"},{"col1":"value2","col2":"value2","col3":"value2"},{"col1":"value3","col2":"value3","col3":"value3"}]; 

如果您試圖存儲每個對象,那麼不要將其或任何事物串聯起來,它已經是完美的形式。將您的for()循環更改爲循環遍歷數據對象。

Kristof Degrave有一個很好的觀點,爲了性能的原因將這些放在實際循環之外。

var transaction = db.transaction([STORE], IDBTransaction.READ_WRITE); 
    var objstore = transaction.objectStore(STORE); 

    for (i = 0; i < data.length; i++) { 
     objstore.put(data[i]); 
    } 
+1

是,工作! (我忘了在這裏寫「[i]」)我正在嘗試所有類似於:eval(),JSON.stringify()和JSON.parse(),並沒有嘗試直接和循環... 非常感謝mcpDESIGNS!乾杯。 –

+1

我會將事務和對象存儲部分放在for循環之外,這會提高性能。 –

+0

哼哼......你是什麼意思克里斯托夫?像在循環內調用一個外部函數來添加每個對象?那不是更加圓形的嗎? –

4

新訪客,這表明修改一點點: IDBTransaction.READ_WRITE已被棄用,所以用「讀寫」代替。

資源:https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB 參考:

舊版實驗實現使用,而不是 「讀寫」 不推薦的恆定 IDBTransaction.READ_WRITE。

而且,以減少LOC(我大多喜歡),使用:

var objstore = db.transaction([STORE], "readwrite").objectStore(STORE); 
for (i = 0; i < data.length; i++) { 
    objstore.put(data[i]); 
}