我希望能够在本地将数组存储在 JavaScript 中以供离线使用等,例如在 indexedDB 和 localStorage 中。但是,我知道 localStorage 只存储字符串,indexedDB 只存储对象。我知道我可以只是 JSON 序列化数组并将其存储在 localStorage 中,但我想知道是否有一些更官方的方法来做到这一点。
问问题
182 次
4 回答
1
您使用JSON对其进行序列化并将其存储在localStorage中是正确的。
要存储它:
localStorage['foo'] = JSON.stringify(foo);
并检索它:
var foo = JSON.parse(localStorage['foo']);
我假设您知道这在较旧的浏览器(即 Internet Explorer 6/7)中不起作用。
于 2013-08-02T02:24:05.683 回答
1
是的,您几乎可以从 localStorage 进行字符串化和解析。我用这个助手..
var _localStorage = {};
_localStorage.set = function(n, o){
localStorage.setItem(n, JSON.stringify(o||{}));
}
_localStorage.get = function(n){
return JSON.parse(localStorage.getItem(n));
}
_localStorage.array = function(n, f, p){
var arr = _localStorage.get(n) || [];
arr[f](p); _localStorage.set(n, arr);
}
// test
_localStorage.set('cfg', {name:'pro'});
console.log(_localStorage.get('cfg'));
_localStorage.set('cfg', [{name:'pro'}]);
_localStorage.array('cfg', 'push', {name:'flav'});
console.log(_localStorage.get('cfg'));
于 2013-08-02T02:25:16.580 回答
0
您可能对 HTML5 离线存储之类的东西感兴趣:http: //www.html5rocks.com/en/tutorials/offline/storage/
关于在 Javascript 中“序列化”对象的方式,您可以通过简单地保持 Javascript 对象使用的 JSON 形式来实现。
于 2013-08-02T02:40:39.920 回答
0
正如其他答案所说,看起来带有 localStorage 的 JSON 是执行此操作的方法。但是,这看起来是最好的方法:
_localStorage={
getItem: function(key){
var value=localStorage.getItem(key);
try{
unJSON=JSON.parse(value);
return unJSON;
}
catch(e){
return value;
}
},
setItem: function(key,value){
if(typeof value!=='string'){
var JSONned=JSON.stringify(value)
localStorage.setItem(key,JSONned);
}
else{
localStorage.setItem(key,value);
}
}
}
于 2013-08-02T02:54:37.423 回答