如何迭代JSON数据

时间:2013-06-19 21:40:44

标签: javascript json

以下是div中的JSON数据:

[{"Identifier":"1","Label":"10 Day","Categories":"Standard","UpdatedBy":"Lno","UpdatedAt":"01-02-2013","RefId":"0","ComType":"1","Cs":["944"],"AM":"Error Message","Message":"asdfasdf","Combiner":[{"uniqueID":"1","type":"7","rule":""}]}]

我通过JS对象访问它:

var myArrayVar=JSON.parse(document.getElementById("populateDT").innerHTML);

我想迭代这个JS对象。以下是我的代码,但它不访问我的键/值字段:

for(var i=0; i<=myArrayVar.length;i++){
    for(var j=0; j<=myArrayVar.Combiner.length; j++){
        var sessionUniqueId= myArrayVar.Combiner[j].uniqueID;
        alert(sessionUniqueId);
        var sessionType=myArrayVar.Combiner[j].type;
        alert(sessionType);
        var sessionRule=myArrayVar.Combiner[j].rule;
        alert(sessionRule);
    }
}

有人可以建议解决方案吗?

5 个答案:

答案 0 :(得分:2)

您永远不会使用i。您需要它来访问当前数组元素,例如:

for(var j=0; j<=myArrayVar[i].Combiner.length; j++){

myArrayVar是您的数组,myArrayVar[i]是该数组中的i个元素,myArrayVar[i].Combineri的组合(数组)属性-th element。

如果你给当前元素一个名字,你会自己做得更容易。 (你可能想要提出一个不太通用的名称,例如current。)

for(var i=0; i<myArrayVar.length;i++){
    var current=myArrayVar[i];
    for(var j=0; j<current.Combiner.length; j++){
        var sessionUniqueId=current.Combiner[j].uniqueID;
        alert(sessionUniqueId);
        var sessionType=current.Combiner[j].type;
        alert(sessionType);
        var sessionRule=current.Combiner[j].rule;
        alert(sessionRule);
    }
}

此外,i不能等于myArrayVar.length,因为该索引已经超出范围。您的循环条件应为<而不是<=

答案 1 :(得分:2)

你有一个包含一个元素的数组。该元素位于myArrayVar[0]中,它是一个对象。要迭代对象,请使用for ... in循环。

var myObj = myArrayVar[0];
for(var key in myObj){
    var value = myObj[key];
    console.log(key, value);
}

您还应该使用console.log进行调试。它将显示有关对象的更多信息,而不是警报。

答案 2 :(得分:2)

for (var i = 0; i < myArrayVar.length; i++) {
    for (var j = 0; j < myArrayVar[i].Combiner.length; j++) {
        var sessionUniqueId = myArrayVar[i].Combiner[j].uniqueID;
        alert(sessionUniqueId);
        var sessionType = myArrayVar[i].Combiner[j].type;
        alert(sessionType);
        var sessionRule = myArrayVar[i].Combiner[j].rule;
        alert(sessionRule);
    }
}

答案 3 :(得分:1)

尝试使用“&lt;”而不是for循环中的“&lt; =”和“myArrayVar [i] .Combiner”而不是“myArrayVar.Combiner”。

答案 4 :(得分:1)

我看到了一些问题。首先,您的ij变量太过分了。他们应该使用<而不是<=

其次,你在循环中声明变量。这很好,但JavaScript不是块作用域,所以你真的最终会使用相同的三个变量覆盖彼此,就像列表中的项目一样多次。您的示例数据只有一个项目,因此您可能还没有注意到覆盖问题 - 但是一旦列表中有多个项目,就可能出现问题。