2012-07-13 10 views
5

El servidor devuelve la matriz de objetos en JSON. Parece que:JSON.parse para la matriz del objeto

{"d":"[ 
    {\"Id\":1,\"IsGood\":true,\"name1\":\"name1dsres\",\"Name2\":\"name2fdsfd\",\"name3\": \"name3fdsgfd\",\"wasBorn\":\"\\/Date(284011000000)\\/\"}, 
    {\"Id\":2,\"IsGood\":false,\"name1\":\"fdsfds\",\"name2\":\"gfd3im543\",\"name3\":\"3543gfdgfd\",\"WasBorned\":\"\\/Date(281486800000)\\/\"} 
]"} 

Necesito analizar mediante la función JSON.parse. Estoy haciendo esto de esta manera:

function myFunction(dataFromServer){ 
     var parsedJSON = JSON.parse(dataFromServer.d); 
     for (var item in parsedJSON.d) { 
      // how do I get the fields of current item? 
     } 

Este código no funciona, vuelve indefinida

for (var item in parsedJSON) { 
     alert(item.Id); 
} 
+0

y lo que es tu pregunta ?? – Jashwant

+0

Suponiendo que 'dataFromServer' contiene los datos que ha publicado y que ya los ha analizado,' 'parsedJSON' ya es una matriz, no tiene una propiedad' d'. Si desea saber cómo acceder a las propiedades de los objetos, consulte https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects –

+1

Acerca de su actualización: esa no es la forma de iterar sobre las matrices. Eche un vistazo al siguiente enlace para comprender 'for ... in': https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in. Use un ciclo 'for' normal para iterar sobre la matriz. –

Respuesta

6

Esto funciona perfectamente

function myFunction(dataFromServer){ 
     var parsedJSON = JSON.parse(dataFromServer.d); 
     for (var i=0;i<parsedJSON.length;i++) { 
      alert(parsedJSON[i].Id); 
     } 
} 

Pero esto doens't

function myFunction(dataFromServer){ 
      var parsedJSON = JSON.parse(dataFromServer.d); 
      for (var item in parsedJSON) { 
       alert(item.Id); 
     } 
} 
+2

Y no debería. La construcción 'for-in' es para iterar sobre las propiedades del objeto, no sobre los elementos de la matriz (como lo haría en PHP o Python). JS necesita un bucle incremental para iterar matrices. –

+0

'for (index in array) { var value = array [index]; } ' – Alex

2

solo puede acceder a ellos como lo haría con cualquier objeto:

var id = item.Id; 
if (item.IsGood) { ... } 

Si Si desea enumerarlos para usar de alguna manera, eche un vistazo a this SO question.

0

Puede acceder a ellas como lo hace objetos JavaScript oridinary, que es ya sea como item.id o item['id']

+0

¿Cómo hago esto? –

+0

Dentro del bucle (que debería ser un bucle for normal, no para cada uno), donde escribiste tu pregunta, obtienes el objeto y simplemente accedes a él ya sea usando notación de puntos o accediéndolo como un mapa. Pero como @Rab Na se notó, el valor de d no es una matriz sino una cadena de una matriz. Esto significa que debe analizarlo en un objeto JSON antes de acceder a los elementos en la matriz. –

Cuestiones relacionadas