2011-12-13 108 views
11

我有一些JSON-代码中有多个对象:如何通过JSON数组循环?

[ 
    { 
     "MNGR_NAME": "Mark", 
     "MGR_ID": "M44", 
     "EMP_ID": "1849" 
    }, 
    { 
     "MNGR_NAME": "Steve", 
     "PROJ_ID": "88421", 
     "PROJ_NAME": "ABC", 
     "PROJ_ALLOC_NO": "49" 
    } 
] 

我的JSON循环片段是:

function ServiceSucceeded(result) 
{  
    for(var x=0; x<result.length; x++) 
    {  

    }  
} 

可否请你让我知道如何检查有没有“occurence MNGR_NAME“。 (它在我的情况下出现两次)。

+1

在你的问题中'不''数字'? –

回答

28

您需要在迭代中访问result对象。

for (var key in result) 
{ 
    if (result.hasOwnProperty(key)) 
    { 
     // here you have access to 
     var MNGR_NAME = result[key].MNGR_NAME; 
     var MGR_ID = result[key].MGR_ID; 
    } 
} 
+0

您的答案帮助我的JSON数组摆脱了不良数据。但为什么这些数据通过发送?你如何检查额外的东西? – Xogle

+0

感谢您使用直接的JavaScript。 – johnny

0

这会发现在MNGR_NAME键的出现的次数你ObjectArray

var numMngrName = 0; 

$.each(json, function() { 
    // 'this' is the Object you are iterating over 
    if (this.MNGR_NAME !== undefined) { 
     numMngrName++; 
    } 
}); 
5

你可以使用jQuery的$.each

var exists = false; 

    $.each(arr, function(index, obj){ 
     if(typeof(obj.MNGR_NAME) !== 'undefined'){ 
      exists = true; 
      return false; 
     } 
    }); 

    alert('Does a manager exists? ' + exists); 

返回false将打破各,所以当遇到一位经理时,迭代将停止。

+0

如果你想计数,当然不应该返回false。 –

0

在循环中result[x]是对象,所以如果您想计算可能存在或可能不存在的成员;

function ServiceSucceeded(result) 
{ 
    var managers = 0 
    for(var x=0; x<result.length; x++) 
    { 
     if (typeof result[x].MNGR_NAME !== "undefined") 
      managers++; 
    } 
    alert(managers); 
} 
0

如果您还希望获取包含属性的元素,您可以使用$ .each或$ .grep。

filtered = $.grep(result, function(value) { 
    return (value["MNGR_NAME"] !== undefined) 
}); 
count = filtered.length 
0

您可以遍历集合并检查每个对象是否包含属性:

var count = 0; 
var i; 
for(i = 0; i < jsonObj.length; i += 1) { 
    if(jsonObj[i]["MNGR_NAME"]) { 
     count++; 
    } 
} 

工作例如:http://jsfiddle.net/j3fbQ/

2

请注意,您的目标是JavaScript对象的数组。 你能用这样的东西吗?

var array = [{ 
    "MNGR_NAME": "Mark", 
    "MGR_ID": "M44", 
    "EMP_ID": "1849" 
}, 
{ 
    "MNGR_NAME": "Steve", 
    "PROJ_ID": "88421", 
    "PROJ_NAME": "ABC", 
    "PROJ_ALLOC_NO": "49" 
}]; 

var numberOfMngrName = 0; 
for(var i=0;i<array.length;i++){ 
    if(array[i].MNGR_NAME != null){ 
     numberOfMngrName++; 
    } 
} 

console.log(numberOfMngrName);