2012-09-26 109 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]); 
}