0

我希望能够在本地将数组存储在 JavaScript 中以供离线使用等,例如在 indexedDB 和 localStorage 中。但是,我知道 localStorage 只存储字符串,indexedDB 只存储对象。我知道我可以只是 JSON 序列化数组并将其存储在 localStorage 中,但我想知道是否有一些更官方的方法来做到这一点。

4

4 回答 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 回答