迭代具有对象的json对象

时间:2015-12-25 21:10:45

标签: javascript json

我有一个来自ajax调用的以下json输出,

{17: {access: "1",id: "2"}} 

我想迭代并获得id的值,我使用下面的代码,但我在控制台中收到undefined的错误。

$(obj).each(function(i, val) {
    console.log(val.id);
}); 

我做错了什么?

6 个答案:

答案 0 :(得分:4)

你可以这样做:

var obj = {17: {access: "1",id: "2"}} 

// Native JS
for (var k in obj) {
  console.log(obj[k].id)
}

// JQuery
// Documentaion: http://api.jquery.com/jquery.each/
$.each(obj, function(i, val) { 
  console.log(val.id);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

希望有帮助,有任何疑问吗?

根据要求,我想指出术语“JSON-Object”并不存在。您正在使用一个简单的JavaScript-Object,它可以由JSON-String

组成

答案 1 :(得分:2)

在这种情况下,您应该使用jQuery utils

中的$.each

&#13;
&#13;
var obj = {17: {access: "1",id: "2"}} 

$.each(obj, function(i, val) {
    console.log(val.id);
}); 
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您必须使用$.each(array, callback)

&#13;
&#13;
var obj = {
  17: { id: "2", access: "1" },
  23: { id: "8" }
};

$.each(obj, function(i, val) {
  console.log(val.id);
}); 
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

请尝试以下代码。

var obj = {17: {access: "1",id: "2"}};

if( $.isPlainObject(obj) ) {
  $(obj).each(function(i, val) {
    console.log(val.id);
}); 
}
else {
  console.log('invalid Object');
}

答案 4 :(得分:0)

以递归方式使用Object.keys()Array.prototype.some()的解决方案。

&#13;
&#13;
var object = { 17: { access: "1", id: "2" } };

function find(p, o) {
    var result;
    Object.keys(o).some(function (k) {
        if (k === p) {
            result = o[k];
            return true;
        }
        if (typeof o[k] === 'object') {
            result = find(p, o[k]);
        }
    });
    return result;
}

document.write('<pre>' + JSON.stringify(find('id', object), 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 5 :(得分:0)

您正在制作JSON的jQuery对象,然后迭代该jQuery对象。请查看jQuery.each()的API文档:

你应该像这样使用它:

jQuery.each(object, callback)

其中object是要迭代的对象,callback是要为object中的每个键运行的回调函数。

&#13;
&#13;
var obj = {
  17: {
    access: "1",
    id: "2"
  },
  18: {
    access: "2",
    id: "5"
  }
};

$.each(obj, function(i, val) {
  document.body.innerHTML += val.id + "<br>";
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;