2010-07-24 19 views
6

Ho un array di uscita JSON come questoCome stampare dati json.

{ 
    "data": [ 
     { 
     "name": "Ben Thorpe", 
     "id": "XXXXXXXXXXX" 
     }, 
     { 
     "name": "Francis David", 
     "id": "XXXXXXXXXXX" 
     }, 
} 

voglio ciclo attraverso di essa e stampare i tutti i nomi utilizzando JavaScript. Voglio essere in grado di farlo.

for(i=0;i<length;i++){ 
     var result += response.data[i].name + ', '; 
} 

Ma non riesco a trovare la lunghezza dell'oggetto json utilizzando javascript.

risposta

5

response.data è un array di oggetti, quindi ha una proprietà length che è possibile utilizzare per iterare i suoi elementi.

var result; 

for(var i=0;i<response.data.length;i++) 
{ 
     result += response.data[i].name + ', '; 

} 
+2

necessario spiegare questo molto meglio. –

2

Se si desidera semplicemente guardare per scopi di debug, fare un console.log(myObject) o console.dir(myObject) e dare un'occhiata alla console di Firebug/chrome/safari.

L'oggetto non ha automaticamente una proprietà length perché non è un array. Per iterare su proprietà di un oggetto, fare qualcosa di simile:

for (var p in location) { 
    console.log(p + " : " + location[p]); 
} 

In alcuni casi si consiglia di iterare proprietà dell'oggetto, ma non le proprietà del prototipo dell'oggetto. Se stai ricevendo roba indesiderata con il ciclo for..in regolare, utilizzare Object.prototype s' hasOwnProperty:

for (var p in location) if (location.hasOwnProperty(p)) { 
    console.log(p + " : " + location[p]); 
} 

Il fatto è che, se questa è/era davvero i dati JSON, che avrebbe dovuto essere una stringa ad un certo punto, in quanto JSON è per definizione una rappresentazione di stringa di un oggetto. Quindi la tua domanda "Come stampare dati json" si legge quasi come "Come stampare una stringa". Se vuoi stamparlo, dovresti essere in grado di catturarlo prima che arrivi a qualsiasi cosa l'abbia analizzato e stamparlo.

+0

Siamo spiacenti, response.data è sicuramente un array e quindi ha una proprietà length. Sebbene la tua risposta sia accurata per una mappa letterale o "array associativo" non è rilevante per questa domanda. –

+0

Hmm, sta cercando di ripetere su un array non è lui? La parentesi di chiusura mancante e il letterale dell'oggetto esterno mi hanno buttato fuori, ho pensato che stesse tentando di eseguire un'iterazione su un oggetto creato da JSON.parse() o simile. In realtà, per..in funzionerà bene anche se l'oggetto è un array ... dovrebbe funzionare altrettanto bene che usare '.length' fino a quando Array.prototype non è stato modificato. –

+0

errore onesto. e certo, for-in può/può funzionare, ma io tendo a favorire il codice che funziona. ;-) –