在LocalStorage中存储用户定义的JavaScript对象并将其作为用户定义的对象类型进行检索

时间:2012-08-05 11:55:10

标签: javascript json

我一直致力于一个涉及localstorage的应用程序。我有一组deck类型的对象。 deck对象本身包含card类型对象。因此,在查看了如何使用localstorage来存储对象之后,我发现了这个SO帖子:

Storing Objects in HTML5 localStorage

根据我的理解,localstorage仅将数据存储为字符串,因此需要使用JSON.stringify将我的deck对象转换为字符串。

但是,当我使用JSON.parse从localstorage中检索对象时,我得到的对象不是我原来的用户定义类型,即deck类型。

我的问题是这样的:有没有办法从localstorage中检索我的对象作为其原始类型(卡片类型)的对象?提前感谢您的帮助!

1 个答案:

答案 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 ) 

给出以下内容:

enter image description here