繁体   English   中英

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

[英]Loop through and extract item values from JSON notation using Javascript

我有以下JSON:

{"items":
 [
  {"id":"5054","nodeId":"3286"},
  {"id":"8888","nodeId":"7777"},
  {"id":"3421","nodeId":"1234"},
  {"id":"8748","nodeId":"2435"}
 ]
}

当我单击页面上的按钮时,我想运行一个脚本,该脚本检索存储为JSON表示法的cookie的值,然后循环遍历该表示法中的项目,并将单击的按钮的id与存储的id进行比较在JSON中。 如果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。

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

for (in)循环遍历对象的属性名称 ,而不是属性values

var prop;
for (var p in test) {
  prop = test[p];
  console.log(p, prop, prop[0].id);
}

PS:或者,如果您只想使用test名称items遍历该属性(您已经知道您感兴趣的属性名称,并且该值将是一个数组)。

for (var i = 0, e = test.items.length; i < e; ++i) {
  console.log(i, test.items[i], test.items[i].id);
}

您需要先向下钻取“项目”,然后才能遍历数组。

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/

试试jQuery,看看它是否有效:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM