从JSON检索键值

时间:2015-03-03 21:23:14

标签: javascript json local-storage

我有一个日历。在其代码中,有一个Object和一个JSON,它包含几个属性,如

   [{"Date":"17-3-2015","Event":"Test drive","Participants":"John, George","Description":"Testing a new F30"},
    {"Date":"17-3-2015","Event":"Football match","Participants":"FCSM vs FCKK","Description":"New season start"},
    {"Date":"25-3-2015","Event":"Jane's Birthday","Participants":"Jane, John, Richard, Alice","Description":"Celebration with my friends"}]

但由于该数据在localStorage中,我通过

检索它
var existEvents = JSON.parse(localStorage.getItem('events'));
for(i=0; i<existEvents.length; i++) {
    var item = localStorage.getItem(localStorage.key(i));
    console.log(item);
};

existEvents =我的日历中的每个新活动

console.log(item);会返回上面输入的数据。

我需要的是检索每个Date值(= key)。所以我假装

 item.Date

必须有效,但事实并非如此。和

一样
item[0].value

我在阅读了这个问题+答案之后试过了 Access / process (nested) objects, arrays or JSON

我做错了什么?请帮忙!

3 个答案:

答案 0 :(得分:3)

使用Array.ForEach()的好方法,它也可以用于循环第二个参数值为第一个参数和键(如果存在)的对象。在您的示例中,for each获取此数组,并在其上循环,一次检索一个对象。

此对象中包含Date键,因此您可以使用obj.key访问它。但是,最好使用.hasOwnProperty来检查密钥是否首先存在。

您还可以使用forEach循环对象键,然后您就可以拥有obj/key。例如,从数组循环中循环每个obj将为您提供obj => 17-3-2015 | key => Date ...等。

var x =  [{"Date":"17-3-2015","Event":"Test drive","Participants":"John, George","Description":"Testing a new F30"},
        {"Date":"17-3-2015","Event":"Football match","Participants":"FCSM vs FCKK","Description":"New season start"},
        {"Date":"25-3-2015","Event":"Jane's Birthday","Participants":"Jane, John, Richard, Alice","Description":"Celebration with my friends"}];

x.forEach(function(obj,key){console.log(obj.Date) });

您的代码可以是:

JSON.parse(localStorage.getItem('events')).forEach(function(obj,key){console.log(obj.Date) });

答案 1 :(得分:1)

我不认为你需要回到for循环中的localstorage,因为你已经在变量existsEvents中拥有了所有数据。

var existEvents = JSON.parse(localStorage.getItem('events'));
for(i=0; i<existEvents.length; i++) {
    var item = existEvents[i];
    console.log(item);
};

答案 2 :(得分:1)

HTML5 LocalStorage是一个关联数组存储,getItem函数抓取其中一个项目。所以,

localStorage.getItem ("somekey")

返回设置为somekey的变量。在您的代码片段中,您在localStorage中存储的变量是恰好是JSON格式的String。 JSON.parse ()将JSON转换为您已存储的String所代表的实际数组。

var existEvents = JSON.parse (localStorage.getItem ('events'));
for (var i = 0; i < existEvents.length; i++) {
    var item = existEvents [i];
    console.log(item);
};

existEvents是一个Array对象,因此您可以像平常一样访问它。在您从localStorage检索并解析后,您不再需要访问localStorage.getItem