显示在Localstorage中保存的JSON对象

时间:2014-07-18 21:00:16

标签: jquery json html5 local-storage local

我正在尝试从Web浏览器中的localstorage中检索JSON对象,然后显示值。我能够保存JSON对象,并向其推送/追加新数据。我很难找出检索和显示它所需的逻辑。为了给出一点背景,变量“S”是一个总是在变化的数字。时间,是点击(主要功能)发生的时间。我希望这两个东西配对在一起。

EX. I would like to print:
123456 - Time: 2:04
54321 - Time : 3:15

以下是我如何保存,推送/追加:

$("#oico").click(function() {
var S = window.localStorage.getItem("_snum");
var myDate = new Date();
var theDate = (myDate.getMonth()+1) + '.' + (myDate.getDate()) + '.' +     myDate.getFullYear();
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
var time = h + ":" + m + ":" + s;
var obj = {};
obj[S] = time;
if (window.localStorage.getItem("_obj") === null) {
window.localStorage.setItem("_obj", JSON.stringify(obj));
} else {
    var existingEntries = JSON.parse(window.localStorage.getItem("_obj")) || [];;
    entry[S] = time;
    window.localStorage.setItem("entry", JSON.stringify(entry));
    // Save allEntries back to local storage
    existingEntries.push(entry);
    window.localStorage.setItem("_obj", JSON.stringify(existingEntries));
}
});

我试图想出一种方法来打印对象“_obj”中所有S属性的列表。但是,由于S不是常量值/键,我无法弄清楚如何在列表中打印所有“S”属性及其各自的时间值。我知道我如何构建它的逻辑可能存在缺陷,这就是我希望得到帮助的原因。

1 个答案:

答案 0 :(得分:0)

我建议你通过你的对象循环for循环。像这样,您将获得所有密钥,而不需要提前知道他们的名字:

for (key in _obj) {

    alert("The current snum is: " + key);
    alert("Stored under the snum is: " + _obj[key]);

    if (key.match(/[0-9]+/)) {
       alert("Key is only numeric. It must be an snum.");
    }
}

在Javascript中,您的对象属性可以是任何数值:

var obj = {
  1 : 'A',
  100 : 'B',
  42 : 'C'
};

for (key in obj) {
  alert ("Key: " + key + " val: " + obj[key]);
}

编辑14/19/07

我认为你混淆了对象或原始价值的地点和原因。

如果您只想输入单个值(如存储时间),则无需根据值创建对象和json。因此,如果您在S中有一个名称并且要存储time,那么请写下:

window.localStorage.setItem(S, time);

然后,由于localStorage是一个对象,您可以只遍历存储的键值对并查找所有数字和时间:

for(key in window.localStorage){
  val = localStorage.getItem(key); 
  alert("Number: " + key + " time: " + val);
}

如果如果你打算创建一个对象并将其存储为json,那么你应该为该对象选择一个唯一的名称,存储它,稍后读取并在存储时再次更改它。独特的名字。像这样:

// Read the object to be added a new property
var myObjectJson = window.localStorage.getItem("MyObjectXY");
var myObject = JSON.parse(myObjectJson);

// Add a new key value pair
myObject[S] = time; 

// Store the object
window.localStorage.setItem("MyObjectXY", JSON.stringify(myObject));

如果你这样工作,你想要遍历对象,而不是通过存储项。

为了获得更清晰的视线,这里是JSFiddle。它只允许存储键值对。

为了避免本地存储命名空间污染,我建议第二种方法,存储一个对象。命名空间污染导致难以发现的错误。