2012-11-13 82 views
-1

这是JSON返回遍历JSON

var errorsObject = JSON.parse('{ "fieldErrors": {"name":["You must enter your name1"],"name":["You must enter your name2"],"age":["Only people ages 13 to 19 may take this quiz"]}}'); 

下面的代码第一个循环工作得很好,我得到这样的名字的键名键和值,年龄等。在第二循环要拿到钥匙的值从外部循环中选择。 Issue is errors.fieldErrors[key]。我需要首先循环只有名称的键,并获得2个值。

$.each(errors.fieldErrors, function(key, val) { 
    alert("key->" + key); //Fine 
    $.each(errors.fieldErrors[key], function(index, val) { 
     alert("key->" + key + ", val->" + val); 
    }); 
}); 
+2

您的JSON是有效的,但结果只会有一个“名字”键,因为第二个会覆盖第一个!同一个关键字只能在对象字面值中存在一次 – devnull69

+0

由于有'errors.fieldErrors [key]'的含义,您可以简单地在第一次迭代中使用'val'。 –

+0

在第二个$ .each()循环中,密钥被称为“索引”而不是“密钥” – devnull69

回答

6

一个对象不能包含两次相同的密钥,所以你试图做的事情是不可能的。解析JSON时,第一条消息会丢失。

但是,您的值是数组 - 为什么不更改返回JSON的代码以正确使用这些数组?并假设它是由PHP代码创建的事实,你可以创建像使用字符串函数创建它,而不是json_encode - 另一件应该改变的东西,如某人的JSON气味...

+0

你对“同样的钥匙两次”是正确的。我没有这个JSON,但自己做了。这意味着我不需要内部循环。从第一个循环可以获得键和值来产生我的错误。 – Pirzada

+0

您仍然需要修复您的JSON,以便它不包含重复密钥! – ThiefMaster

+0

我自己添加了重复密钥。我不会返回重复的密钥。这只是我脑海中不知道为什么。我错了。愚蠢的问题。 – Pirzada