我有一个MVC应用程序,其中控制器获取对象列表,使用JavaScriptSerializer()
将其序列化,创建一个传递给客户端视图的JSON对象。
出于某种原因,当我尝试使用ranged for循环遍历对象时,每个对象都是未定义的,但是当我使用常规for循环遍历对象并使用方括号中的当前迭代值索引对象时,我可以访问每个子对象(即这对for(var i = 0; i < jsonObj.length; i++)
与for(var sub in jsonObj)
对比。为什么在这个实例中,ranged for循环不起作用?
JSON对象:
[
"Obj1": {
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
},
"Obj2": {
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
},
"Obj3": {
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
}
]
for(var sub in finalJson){
console.log(sub["Value1"])
}
答案 0 :(得分:0)
您的JSON无效,您需要删除对象名称,因此它是有效列表:
[{
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
}, {
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
} {
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
}]
在这种情况下,远程循环将起作用:
JsonObj.forEach(function(obj) {
console.log(obj);
})
或将其转换为包含其他对象作为属性的对象:
{
"Obj1": {
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
},
"Obj2": {
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
},
"Obj3": {
"Value1": "3454234",
"Value2": "345643564",
"Value3": "665445",
"Value4": "True"
}
}
在这种情况下,你可以通过键循环:
for(var key in JsonObj) {
console.log(key);
}
你的第二个循环不起作用的原因是因为for..in
用于迭代对象键,但你的JSON是一个对象数组,而不是一个对象
答案 1 :(得分:0)
您提供的JSON对象不是正确的JSON对象。它是一组键值对。正确的JSON对象必须被{...}包围,而不是[...]。您可以检查变量类型jsonObj instanceof Array;
如果它得到true
- 那就是原因。