Jquery 显示本地存储中保存的JSON对象

Jquery 显示本地存储中保存的JSON对象,jquery,json,html,local-storage,local,Jquery,Json,Html,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() {

我试图在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”属性及其各自的时间值。我知道我关于如何构造它的逻辑可能有缺陷,这就是为什么我需要帮助。

我建议您通过对象使用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]);
}
编辑2007年14月19日

我认为您混淆了对象或原始值的位置和原因

如果您只希望输入一个值,如存储时间,则无需从该值生成对象和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));
如果您是这样工作的,那么您希望遍历对象,而不是遍历存储项

为了看得更清楚,这里有一张照片。它只允许存储键值对


为了避免本地存储名称空间污染,我推荐第二种方法,存储对象。名称空间污染导致很难找到bug

将其转换为一个函数后:函数displayValues(){for(key in{srtobj2){alert(“当前snum是:“+key”);alert(“存储在snum下的是:”+\srtobj2[key]);if(key.match(/[0-9]+/){alert(“key只是数字,它必须是一个snum”);}}}displayValues();我得到错误:Uncaught SyntaxError:意外标记{我忘记了if语句中的第二个右括号。我编辑了答案。我不确定是什么问题,但当我尝试使obj=window.localstorage.getItem(“\u obj”)时;然后尝试打印您发布的第二组代码,它只打印了以下内容:Key:82 val]。该键不应该是ex.12345,值不应该是ex.3:05:01吗?我无法为您执行调试工作:-)继续,你会发现的。试着在调试控制台中设置一个断点并检查obj:什么是真正存储的,什么是加载的?或者,试着警告obj的完整json描述以了解真正的内容。for循环只是迭代,没有更多。顺便说一句,大多数浏览器允许你直接检查本地存储。