2012-07-13 15 views
5

Il server restituisce la matrice di oggetto in JSON. Sembra così:JSON.parse per array di oggetti

{"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)\\/\"} 
]"} 

Ho bisogno di analizzare utilizzando la funzione JSON.parse. Sto facendo questo in questo modo:

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

Questo codice non funziona, restituisce il valore undefined

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

e che cosa la tua domanda ?? – Jashwant

+0

Supponendo che 'dataFromServer' contenga i dati che hai postato e tu l'abbia già analizzato,' parsedJSON' è già un array, non ha una proprietà 'd'. Se vuoi sapere come accedere alle proprietà degli oggetti, dai un'occhiata a https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects –

+1

Per quanto riguarda il tuo aggiornamento: Non è così che si itera su array. Dai un'occhiata al seguente link per capire 'for ... in': https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in. Utilizzare un normale ciclo 'for' per scorrere l'array. –

risposta

6

Questo funziona perfettamente

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

Ma questo doens't

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

E non dovrebbe. Il costrutto 'for - in' è per iterare sulle proprietà dell'oggetto, non sugli elementi dell'array (come si potrebbe fare in PHP o Python). JS ha bisogno di un ciclo incrementale per iterare gli array. –

+0

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

2

si può semplicemente accedere come si farebbe con qualsiasi oggetto:

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

Se desideri elencarli per utilizzare in qualche modo, dare un'occhiata a this SO question.

0

È possibile accedere a loro come si fa oggetti JavaScript oridinary, cioè sia come item.id o item['id']

+0

Come posso fare questo? –

+0

All'interno del ciclo (che dovrebbe essere un ciclo normale, non per ciascuno), dove hai scritto la tua domanda, ottieni l'oggetto e accedici semplicemente usando la notazione a punti o accedendola come una mappa. Ma come @Rab Nawas ha notato che il valore di d non è un array ma una stringa di un array. Ciò significa che è necessario analizzarlo in un oggetto JSON prima di accedere agli elementi dell'array. –