如何在localStorage(Javascript)中使用数组存储JSON?

如何在localStorage(Javascript)中使用数组存储JSON?,javascript,arrays,json,html,Javascript,Arrays,Json,Html,我正在为我的项目开发一个HTML5游戏,我的问题是评分系统。 我想显示前十名最佳得分手(已排序)。我目前正在使用JSON中的数组 现在我想将JSON数组保存在localStorage中 var storage = '{"Players":[' + '{"score":"0","Name":"Player 2"},' + '{"score":"0","Name":"Player 4"},' + '{"score":"0","Name":"Player

我正在为我的项目开发一个HTML5游戏,我的问题是评分系统。
我想显示前十名最佳得分手(已排序)。我目前正在使用JSON中的数组

现在我想将JSON数组保存在localStorage中

var storage = '{"Players":[' +
        '{"score":"0","Name":"Player 2"},' +
        '{"score":"0","Name":"Player 4"},' +
        '{"score":"0","Name":"Player 1"}]}';

var obj = JSON.parse(storage);

obj['Players'].push({"score": 13,"Name": "Player1"});
obj['Players'].push({"score": 523,"Name": "Player2"});
obj['Players'].push({"score": 3,"Name": "Player3"});
obj['Players'].push({"score": 1235,"Name": "Player4"});

storage = JSON.stringify(obj);

var sortColumnScore = "score";

function SortByScore(x,y) {
    return ((x[sortColumnScore]  == y[sortColumnScore]) ? 0 : ((x[sortColumnScore] < y[sortColumnScore]) ? 1 : -1 ));
}

obj.Players.sort(SortByScore);

for (var i = 0; i < 5; i++) {
    document.getElementById("s"+ (i+1)).innerHTML =
    obj.Players[i].score;
    document.getElementById("p"+ (i+1)).innerHTML =
    obj.Players[i].Name;
};
var存储='{“玩家”:['+
{“分数”:“0”,“姓名”:“玩家2”},'+
{“分数”:“0”,“姓名”:“球员4”},'+
“{”分数“:”0“,”姓名“:”玩家1“}]}”;
var obj=JSON.parse(存储);
obj['Players'].push({“score”:13,“Name”:“Player1”});
obj['Players'].push({“score”:523,“Name”:“Player2”});
obj['Players'].push({“score”:3,“Name”:“Player3”});
obj['Players'].push({“score”:1235,“Name”:“Player4”});
storage=JSON.stringify(obj);
var sortColumnScore=“score”;
函数SortByScore(x,y){
返回((x[sortColumnScore]==y[sortColumnScore])?0:((x[sortColumnScore]
本地存储不能包含对象或数组。但您可以将其转换为字符串

// Store the object
localStorage.myObject = JSON.stringify(myObject);

// Read the object
var myObject = JSON.parse(localStorage.myObject);
从以下位置获取项目:

将项目保存到:



注意:您只能将字符串保存到localStorage,因此,您需要通过
JSON.stringify
将数据转换为字符串,然后在从localStorage检索字符串时使用
JSON.parse

基本上,您应该使用localStorage,就像使用上面的
storage
一样。您可以像@Magus一样以对象方式使用localstorage,也可以以关联数组方式使用localstorage,调用其原语
getItem
setItem

简单用法:

var storage = '{"Players":[' +
    '{"score":"0","Name":"Player 2"},' +
    '{"score":"0","Name":"Player 4"},' +
    '{"score":"0","Name":"Player 1"}]}';

var obj = JSON.parse(storage);

obj['Players'].push({"score": 13,"Name": "Player1"});
obj['Players'].push({"score": 523,"Name": "Player2"});
obj['Players'].push({"score": 3,"Name": "Player3"});
obj['Players'].push({"score": 1235,"Name": "Player4"});

localStorage.setItem('Players', JSON.stringify(obj));
然后从localStorage调用获取数据:

var myobj = JSON.parse(localStorage.getItem('Players'));
高级用法:

var storage = '{"Players":[' +
    '{"score":"0","Name":"Player 2"},' +
    '{"score":"0","Name":"Player 4"},' +
    '{"score":"0","Name":"Player 1"}]}';

var obj = JSON.parse(storage);

obj['Players'].push({"score": 13,"Name": "Player1"});
obj['Players'].push({"score": 523,"Name": "Player2"});
obj['Players'].push({"score": 3,"Name": "Player3"});
obj['Players'].push({"score": 1235,"Name": "Player4"});

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

有关localstorage/sessionstorage的正确用法(与当前用户会话结合)和初始化(根据您的目标),请参阅本期后面@War10ck的注释。

没有关于本地存储的代码。我不知道从哪里开始使用localstorage。这就是我寻求帮助的原因。:)因此,代码片段是完全不相关的,只需选中Read答案将是我的第一条建议为什么要使用localstorage?是的,但我如何再次访问它,以便在项目中对其进行排序和显示?使用行
读取对象
解析对象后,我可以再次这样访问数组吗<代码>目标玩家[0]。得分好的,我试试。我只想评论一下它是否有效。谢谢(Y)@Magus虽然可以用,但如果他刷新页面就不行了,因为这不是使用localStorage的正确方法。如果您像这样将项设置到localStorage,那么您只是在其中创建了一个属性,您可以这样做
window.myObject=
,或者
document.myObject=
等等。在解析它之后,我可以像这样再次访问该对象吗
obj.Players[i].score
@DarbsLingo是的,你可以:)如果我刷新页面,数据是否会保留?有关此类问题,请参阅@Buzinas引用的文档。无论如何,即使您关闭窗口并稍后重新打开,localStorage也会保留数据。sessionStorage仅在同一会话(即浏览器的同一选项卡)中保留数据。
var myobj = JSON.parse(localStorage.getItem('Players'));