我一直致力于一个涉及localstorage的应用程序。我有一组deck
类型的对象。 deck对象本身包含card
类型对象。因此,在查看了如何使用localstorage来存储对象之后,我发现了这个SO帖子:
Storing Objects in HTML5 localStorage
根据我的理解,localstorage仅将数据存储为字符串,因此需要使用JSON.stringify
将我的deck对象转换为字符串。
但是,当我使用JSON.parse
从localstorage中检索对象时,我得到的对象不是我原来的用户定义类型,即deck
类型。
我的问题是这样的:有没有办法从localstorage中检索我的对象作为其原始类型(卡片类型)的对象?提前感谢您的帮助!
答案 0 :(得分:2)
您可以使用可选的reviver argument进行转换:
var json = '{"decks": [{"cards":[{"id": 1},{"id": 2},{"id": 3}],"id":3},{"cards":[{"id": 4},{"id": 5},{"id": 6}],"id":4}]}';
function Deck( cards, id ) {
this.cards = cards;
this.id = id;
}
function Card(id) {
this.id = id;
}
var decks = JSON.parse(json, function(key, value ) {
if( key === "decks" ) {
return value.map( function(deck) {
return new Deck( deck.cards, deck.id );
});
}
else if( key === "cards" ) {
return value.map( function( card ) {
return new Card( card.id );
});
}
else {
return value;
}
}).decks;
然后做:
console.log( decks )
给出以下内容: