localStorage中设置的字符串作为对象

时间:2017-04-27 15:25:33

标签: javascript reactjs local-storage

我将JSON.stringified对象保存在localStorage中,但它们作为对象(&#34; [object Object]&#34;)被检索,无法解析。< / p>

情景:

我做的第一件事是

localStorage.clear();

我已创建3个对象作为默认加载到localStorage。每个对象都是JSON.stringified并与localStorage中的自己的密钥一起保存。然后,我使用for循环和localStorage.key(i)来获取密钥并检索对象(字符串)。

if (localStorage.length === 0) {

// make 3 objects

console.log(typeof c);        // logs "string"
localStorage.setItem("_fruit", a);
localStorage.setItem("_veggie", b);
localStorage.setItem("_protein", c);
var test = localStorage.key(0);
test = localStorage.getItem(test);
console.log(test);           // logs stringified JSON
}

到目前为止一切顺利。在if语句之外我有:

var test = localStorage.key(0);
console.log(test);          // logs correct key
test = localStorage.getItem(test);
console.log(test);          // logs string of object
test = JSON.parse(test);
console.log(test);          // logs object correctly

这也很好地输出到DOM。但是一旦我发表评论

// localStorage.clear();

要测试从本地存储中检索,我遇到了这个问题:

var test = localStorage.key(0);
console.log(test);          // logs correct key
test = localStorage.getItem(test);
console.log(test);          // logs "[object Object]"
test = JSON.parse(test);    <------ logs Unexpected token o in JSON at position 1
console.log(test);          // code stops above

我知道无法保证索引本地存储的顺序,这很好。如果有所作为,请使用React。

1 个答案:

答案 0 :(得分:2)

您需要在存储对象之前对其进行字符串化:

localStorage.setItem('key', JSON.stringify(obj));

然后,在检索它时,你只需要

JSON.parse(localStorage.getItem('key'));

原因是所有内容都存储为字符串,因此它调用.toString()方法,对象返回[object Object]

修改 我注意到你说你确实对对象进行了字符串化。我想这将取决于对象的格式,但我没有遇到任何事先没有清除存储的问题。