我将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。
答案 0 :(得分:2)
您需要在存储对象之前对其进行字符串化:
localStorage.setItem('key', JSON.stringify(obj));
然后,在检索它时,你只需要
JSON.parse(localStorage.getItem('key'));
原因是所有内容都存储为字符串,因此它调用.toString()方法,对象返回[object Object]
修改强> 我注意到你说你确实对对象进行了字符串化。我想这将取决于对象的格式,但我没有遇到任何事先没有清除存储的问题。