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

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

数组的JSON响应如下所示:

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

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

我试过了:

 $.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 

等等

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

谢谢

您的问题是您没有解析JSON字符串。 因此,您的foreach将遍历JSON字符串中的字符。 我敢打赌它会在IE <7中失败,因为它不会将字符串视为字符数组。

 // 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]); } 
 var response = {"1":"Schools","20":"Profiles","31":"Statistics","44":"Messages","50":"Contacts"}; for (var i in response) { console.log(i + ' ' + response[i]); } 

工作得很好,你怎么得到你的回应var?

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

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

  1. json = JSON.parse(xmlHttp.responseText, function(key,value){// can do some other stuff here.});

然后你可以将变量作为普通对象来操作,如obj.a或obj [“a”]。

愿这会对你有所帮助。

http://jsfiddle.net/sG5sF/

jQuery.each工作正常。 for-each循环都是如此

http://jsfiddle.net/TfjrS/

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

考虑一下如何使用jQuery解析JavaScript对象以获得可能的答案。

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

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

编辑

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