【问题标题】:Loop over a JSON object containing an array of objects遍历包含对象数组的 JSON 对象
【发布时间】:2011-06-29 09:39:06
【问题描述】:

真的希望有人能帮我解决这个问题,这让我很生气......

我有一个 JSON 对象,来源:

[{"description":"General Accessories & Parts","id":"1"},{"description":"General Parts","id":"2"},{"description":"Parts","id":"3"}]

这是一个PHP返回的数组,以前是这样的:

$array[0]['description']="General Accessories & Parts";
$array[0]['id']="1";

$array[1]['description']="General Parts";
$array[1]['id']="2";

etc...

所以,我将数组放入我的 JavaScript 代码中:

obj=eval(ajax.responseText);

现在我需要遍历数组中每个元素的描述和 id,我确实尝试过:

for(var key in obj){
    if(!obj[key].hasOwnProperty(key)) continue;

    alert(obj[key]['description']);
}

我尝试的上述代码只是回显[object Object],[object Object],[object Object],这是我知道的三个对象。

【问题讨论】:

  • 你有 Firebug 吗?您可以检查您的评估对象。顺便说一句,使用 eval 被认为是邪恶的。如果浏览器支持,您应该使用 JSON.parse()。如果你使用 jQuery 或 Prototype,他们也有 api 方法。
  • 您是否在 PHP 代码中将 $array 编码为 Json 格式?
  • @Richard H:是的,得到了​​萤火虫并检查了它与上面发布的相同的对象,我看不出有什么奇怪的。 OK 将使用 JSON.parse(),感谢您的提示,这是有道理的。但不允许使用任何类如 jQuery 或 Prototype,因为这会让老板生气。
  • @Gunner :是的,在我做的 php 代码中:json_encode($array);

标签: javascript json object for-loop


【解决方案1】:

使用

alert( obj[0].description );

而不是

alert( obj[0]['description'] );

快速示例:http://jsfiddle.net/W4dwx/

【讨论】:

  • 嗨,谢谢你的回答,但我也试过了,这样我就不确定了
  • 哇,为那个网站添加了书签,太好了。是的,它在那里工作没有问题,所以它必须是我的代码中的其他内容,所以你可以对此有最佳答案。
  • 我将发布另一个问题,因为我对为什么会发生这种情况有一个小想法,可能与闭包有关,因为一切都是编码的方式。
【解决方案2】:

奇怪的代码:if(!obj[key].hasOwnProperty(key))

在您的情况下,键变量将迭代值 0、1、2

你会要求 obj[0].hasOwnProperty(0)

【讨论】:

  • 嗨,我使用了 if(!obj[key].hasOwnProperty(key)) 以便它不会遍历对象中可能存在的任何其他内容。
  • if(!obj[key].hasOwnProperty(key)) 继续;会跳过我不想要的键。
【解决方案3】:

我无法真正复制您的答案,但我很确定问题是 a) 在您的响应文本中(我们有机会获得确切输出的警报吗?)或 b) 在您的 for 循环中(你正在迭代一个数组,所以它不应该有自己的属性):

var a = [{"description":"General Accessories & Parts","id":"1"},
         {"description":"General Parts","id":"2"},
         {"description":"Parts","id":"3"}];
var b = JSON.stringify(a);
eval("var c = " + b);
for (var i = 0; i < c.length; i++) {
  alert(c[i].description); // alert the three values you want
}

【讨论】:

  • 您好,感谢您的回答。我已经选择了一个最佳答案,但你的答案很好。事实证明,问题与我的代码中的其他内容有关,for 循环实际上工作正常,但由于其他原因它给出了错误的答案。我认为闭包和执行上下文但不太确定,所以我必须用更详细的代码发布另一个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
相关资源
最近更新 更多