我有以下JSON:
{"items":
[
{"id":"5054","nodeId":"3286"},
{"id":"8888","nodeId":"7777"},
{"id":"3421","nodeId":"1234"},
{"id":"8748","nodeId":"2435"}
]
}
当我单击页面上的一个按钮时,我想运行一个脚本,该脚本可以检索存储为JSON表示法的cookie的值,然后遍历表示法中的项目并比较单击的按钮的ID存储在JSON中的id。如果id匹配,则不执行任何操作。如果没有,则应将新项目添加到JSON对象并保存回cookie,以便下次服务器加载页面时,将显示不同的内容。
在现有JSON表示法中添加新项目很容易,我已经有了代码。问题是,我循环使用JSON表示法的代码似乎不起作用:
var cookieTest = getCookie("wishlist"); /* JSON */
// Check a cookie exists
if (cookieTest != null) {
var test = JSON.parse(cookieTest)
for (prop in test) {
console.log(prop);
console.log(prop[0].id);
}
}
第一个console.log似乎返回了项目但是当我尝试返回数组中第一个项目的id时,返回undefined。
我在这里做错了什么?任何帮助将不胜感激。
答案 0 :(得分:4)
for (in)
循环遍历对象的属性 names ,而不是属性 values 。
var prop;
for (var p in test) {
prop = test[p];
console.log(p, prop, prop[0].id);
}
PS:或者,如果您只想迭代名为items
test
的属性(您已经知道您感兴趣的属性名称,并且value将是一个数组)。
for (var i = 0, e = test.items.length; i < e; ++i) {
console.log(i, test.items[i], test.items[i].id);
}
答案 1 :(得分:1)
在循环遍历数组之前,您需要首先向下钻取“项目”。
var cookieTest = '{"items":[{"id":"5054","nodeId":"3286"},{"id":"8888","nodeId":"7777"},{"id":"3421","nodeId":"1234"},{"id":"8748","nodeId":"2435"}]}';
// Check a cookie exists
if (cookieTest != null) {
var test = JSON.parse(cookieTest)
var items = test.items ? test.items : [];
for(thing in items) {
var current = items[thing];
console.log(current.id);
}
}
答案 2 :(得分:-1)
尝试jQuery看看它是否有效:
var obj = jQuery.parseJSON(cookieTest);
console.log(obj.items[0].id);