如何在indexedDB中存储JSON对象?

时间:2012-09-26 17:33:02

标签: javascript 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数据的

如下所示:

[object Object],[object Object],[object Object]

但是有了它,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 个答案:

答案 0 :(得分:4)

对于新访问者,建议进行一些修改: IDBTransaction.READ_WRITE已被弃用,因此请改用“readwrite”。

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

  

较旧的实验性实施使用不推荐使用的常量   IDBTransaction.READ_WRITE而不是“readwrite”。

另外,要减少loc(我最喜欢的),请使用:

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

答案 1 :(得分:3)

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

如果你试图存储每个OBJECT,那么不要将它或其他任何字符串化,它已经是完美的形式。更改for()循环以循环访问数据对象。

Kristof Degrave 有一个很好的观点,出于性能原因,将这些置于实际for循环之外。

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

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