使用Javascript循环并从JSON表示法中提取项目值

时间:2014-06-27 14:16:33

标签: javascript json

我有以下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。

我在这里做错了什么?任何帮助将不胜感激。

3 个答案:

答案 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);
        }
    }

http://jsfiddle.net/6n8dr/

答案 2 :(得分:-1)

尝试jQuery看看它是否有效:

var obj = jQuery.parseJSON(cookieTest);
console.log(obj.items[0].id);