Jquery 显示本地存储中保存的JSON对象
我试图在web浏览器中从localstorage检索JSON对象,然后显示值。我能够保存JSON对象,并向其推送/附加新数据。我很难找出检索和显示它所需的逻辑。为了给大家一点背景知识,变量“S”是一个经常变化的数字。时间,是单击(主功能)发生的时间。我想把这两件东西配对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() {
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循环只是迭代,没有更多。顺便说一句,大多数浏览器允许你直接检查本地存储。