如何在JavaScript中循环遍历JSON关联数组?
我得到了服务器的JSON响应,我必须在javascript中循环访问数组并获取值。但我似乎无法循循善诱。如何在JavaScript中循环遍历JSON关联数组?
数组的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
等等等等
因此,这意味着它的经历作为一个字符串整个响应和劈裂它作为关键/价值。
感谢
你的问题是你不解析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]);
}
谢谢你,工作。 – ssin 2011-05-19 09:00:49
如果您要将数据从其他网站上托管的网址托管在不同的网站上,则需要确保数据在其末尾进行了json编码,并将数据类型更改为“jsonp”。 jQuery向请求添加回调哈希,以便知道将结果返回给哪个函数。请记住,第三方必须是json_encoded,否则在进行回调时,mime类型将不正确。 – 2012-11-16 20:15:04
@DaveCottrell这似乎完全不相关的问题本身,不知道为什么你觉得有必要添加评论。确定存在跨域问题,但OP没有问这个问题,他们忘记解析JSON,你只是增加了噪音...... – 2012-11-16 20:20:32
jQuery.each
工作正常。那么,for-each
循环
他们两人的工作,因为他们应该。您的代码的其他部分可能有错误。 response
变量是否正确地设置为您的问题中给出的JSON对象?你正在检查响应statusCode?对于成功的回应应该是200呢?
var response = {"1":"Schools","20":"Profiles","31":"Statistics","44":"Messages","50":"Contacts"};
for (var i in response) {
console.log(i + ' ' + response[i]);
}
工作得很好,你如何得到你的回应var?
您可以在纯Javascript中使用for-in
构造。当然,你要小心,你只能看物体本身的属性(比如原型库往往污染):
for(var key in response) {
if(response.hasOwnProperty(key)) {
...
}
}
编辑
是否使用jQuery.ajax
?什么是dataType
值?它应该是json
。这可能就是为什么你的回答被解释为一个字符串。另外,当你的回应是console.log
时,它显示为一个字符串还是一个对象?
@Vivin:你为什么使用hasOwnProperty?你在使用原型还是其他库来扩充Object的原型?否则,一个文字对象将只循环第e JSON。 – 2011-05-18 18:08:49
@JuanMendes:我只是为了安全起见(我可能只是偏执狂)。如果您确定永远不会使用污染名称空间的库,那么不需要hasOwnProperty。 – 2011-05-18 18:10:45
@Vivin Paliath:这是一个非常糟糕的折衷,“我将用hasOwnProperty包装所有的循环,因为我可能有一天会使用扩充Object.prototype的库”。即使Prototype停止这样做,因为他们看到它有多糟糕(被迫)。我认为那是一个愚蠢的安全阀。与过早优化一样邪恶。如果一个图书馆增加本地对象,我远离它,现在没有多少库。想想YAGNI http://en.wikipedia.org/wiki/You_ain't_gonna_need_it。另外,对于例子来说,你应该尽可能的保持苗条。 – 2011-05-18 18:23:58
你不需要这样做,处理字符串是一件无聊的工作。你可以通过响应来创建一个对象。 1:json = eval(xmlHttp.responseText);
但是这在某种程度上是不安全的。
json = JSON.parse(xmlHttp.responseText, function(key,value){// can do some other stuff here.});
然后可以操作变量作为这样obj.a或OBJ [ “一个”]正常对象。
愿这能帮助你。
你得到了什么“错误的价值”? – jvenema 2011-05-18 15:50:42
当你尝试这些(看似正确的)策略时会发生什么?如果包含错误值,则会得到更好的答案... – maerics 2011-05-18 15:51:18
第二个示例正常工作:http://jsfiddle.net/vgvw9/究竟哪些方法无效? – JohnP 2011-05-18 15:53:11