如何在javascript中循环JSON关联数组?

时间:2011-05-18 15:47:36

标签: javascript jquery json loops associative-array

我从服务器获得JSON响应,我必须在javascript中循环遍历数组并获取值。但我似乎无法循环。

数组的JSON响应如下所示:

{
   "1": "Schools",
   "20": "Profiles",
   "31": "Statistics",
   "44": "Messages",
   "50": "Contacts"
}

我只想循环遍历它以获取ID和名称并在页面上填充一些值。

我试过了:

$.each(response, function(key, value) {
    alert(key + ' ' + value);
});

// and 

for (var key in response) {
    alert(key + ' ' + response[key]);
}

但两者都没有给出正确的价值观。

提前感谢您的帮助。

答复: 嗨, 我在第二个循环中得到的响应是:

0 {
1 "
2 1
3 "
4 :
5 "
6 S

等等

这意味着它将整个响应作为字符串进行处理并将其拆分为键/值。

由于

6 个答案:

答案 0 :(得分:18)

您的问题是您没有解析JSON字符串。因此,您的foreach将遍历JSON字符串中的字符。

// If you are using jQuery.ajax, you can just set dataType to 'json' 
// and the following line will be done for you
var obj  = jQuery.parseJSON( response );
// Now the two will work
$.each(obj, function(key, value) {
    alert(key + ' ' + value);
});


for (var key in obj) {
    alert(key + ' ' + response[key]);
}

答案 1 :(得分:2)

var response = {"1":"Schools","20":"Profiles","31":"Statistics","44":"Messages","50":"Contacts"};

for (var i in response) {
    console.log(i + ' ' + response[i]);
}

工作得很好,你是如何得到你的回应变量的?

答案 2 :(得分:2)

你不需要这样做,处理字符串是一项无聊的工作。您可以通过响应创建一个对象。 1:json = eval(xmlHttp.responseText);

但这在某种程度上是不安全的。

  1. json = JSON.parse(xmlHttp.responseText, function(key,value){// can do some other stuff here.});
  2. 然后你可以将变量作为普通对象来操作,比如obj.a或obj [" a"]。

    愿这对你有所帮助。

答案 3 :(得分:1)

http://jsfiddle.net/sG5sF/

jQuery.each运行正常。 for-each循环

也是如此

http://jsfiddle.net/TfjrS/

他们两个都应该工作。您的代码的其他部分可能有错误。 response变量是否正确设置为问题中给出的JSON对象?你在检查响应statusCode吗?成功回应应该是200?

答案 4 :(得分:0)

考虑查看How can I parse a JavaScript object with jQuery可能的答案。

答案 5 :(得分:0)

您可以在纯Javascript中使用for-in构造。当然,您需要注意的是,您只关注对象自己的属性(像Prototype这样的库会污染):

for(var key in response) {
    if(response.hasOwnProperty(key)) {
       ...
    }
}

修改

您使用的是jQuery.ajax吗?什么是dataType值?它应该是json。这可能就是您的响应被解释为字符串的原因。此外,当您console.log响应时,它是否显示为字符串或对象?