用JSON覆盖localStorage

时间:2013-12-16 09:52:49

标签: javascript json html5 local-storage craftyjs

这是this

的后续问题

我开始使用localStorage功能, 我不确定它是否按预期工作。

我想在我的JSON文件中覆盖一个布尔值。

玩家在某个阶段遇到退出,然后它会触发下一个阶段的加载, 但我也想要它保存舞台完成的事实。

这是我的JSON数组,默认情况下定义所有地牢都不完整:

var dungeon_prog = {
"dungeon0_prog" : {
    "complete" : true
},
"dungeon1_prog" : {
    "complete" : false
},
"dungeon2_prog" : {
    "complete" : false
}
};

然后我将其设置为本地存储:

localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog));
var dungeon_prog_obj = JSON.parse(localStorage.dungeon_prog);

当玩家在地牢1中点击退出时,我希望它将dungeon1_prog“完整”false覆盖为true

我该怎么做? 实际上是否在localStorage中保存了默认的“false”语句? 感谢。

1 个答案:

答案 0 :(得分:2)

dungeon_prog_obj现在拥有您的JSON对象。要回答你的上一个问题,是的 - localStorage会保存整个JSON字符串,因此它也会保存布尔值。

要覆盖它,您只需设置布尔值,然后再次保存到同一localStorage项目:

dungeon_prog_obj.dungeon1_prog.complete = true;
localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog_obj));

修改

根据请求更新以回答评论中的问题。

我不是100%确定这是问题,但是你说在页面刷新时true值不会持续存在。唯一可信的解释是,在每个页面加载时,您使用localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog));覆盖JSON,其中dungeon_prog是您问题中指定的初始JSON。

如果您在localStorage中有项目,则应该检查加载情况,而不是这样做。您可以通过以下方式执行此操作:

// Check for object in localStorage
var dungeon_prog = JSON.parse(localStorage.dungeon_prog);

// If it does not exist, initialize it and save it
if (dungeon_prog != null) {
    dungeonProg = {
        "dungeon0_prog" : {
            "complete" : true
    },
    "dungeon1_prog" : {
        "complete" : false
    },
    "dungeon2_prog" : {
        "complete" : false
   }
   };

   localStorage.setItem('dungeon_prog', JSON.stringify(dungeon_prog));
}