2011-12-13 61 views
11

tengo algo de JSON-código que tiene varios objetos en ella:¿Cómo recorrer una matriz JSON?

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

Mi fragmento de bucle JSON es:

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

    }  
} 

Podría por favor hágamelo saber cómo comprobar que no hay aparición de " MNGR_NAME "en la matriz. (Aparece dos veces en mi caso.)

+1

¿'no' en su pregunta significa 'número'? –

Respuesta

28

Necesita acceder al objeto result en la iteración.

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

Tu respuesta ayudó a mi matriz JSON a deshacerse de los datos incorrectos. Pero, ¿por qué se envían esos datos? ¿Cómo es que tienes que verificar ese extra si? – Xogle

+0

Gracias por usar JavaScript directo. – johnny

0

Este se encuentra el número de apariciones de la clave MNGR_NAME en su ObjectArray:

var numMngrName = 0; 

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

Se puede usar 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); 

Volviendo false rompa el cada uno, así que cuando se encuentra un administrador, la iteración se detendrá.

+0

Si quiere contar, no debe devolver 'false', por supuesto. –

0

Dentro del ciclo result[x] es el objeto, por lo tanto, si desea contar un miembro que puede estar o no estar presente;

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

Puede usar $ .each o $ .grep, si también desea obtener los elementos que contienen el atributo.

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

Puede iterar sobre la colección y comprobar cada objeto si contiene la propiedad:

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

Ejemplo de trabajo: http://jsfiddle.net/j3fbQ/

2

en cuenta que su objeto es una matriz de objetos de JavaScript. ¿Podría usar algo como esto?

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); 
Cuestiones relacionadas