2010-05-09 15 views
23

Ho una funzione che otterrà un array JSON con oggetti. Nella funzione sarò in grado di scorrere l'array, accedere a una proprietà e usare quella proprietà. Come questo:Utilizzare un array JSON con oggetti con javascript

variabile che io passerò alla funzione sarà simile a questa:

[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}] 

function test(myJSON) 
{ 
    // maybe parse my the JSON variable? 
    // and then I want to loop through it and access my IDs and my titles 
} 

Eventuali suggerimenti come posso risolverlo?

+0

la questione non è chiara. fornire un codice più accurato e descrittivo. –

risposta

3

Per "array JSON contenente oggetti", suppongo si intenda una stringa contenente JSON?

Se è così è possibile utilizzare il metodo di sicurezza var myArray = JSON.parse(myJSON) (nativo o incluso utilizzando JSON2) o il usafe var myArray = eval("(" + myJSON + ")"). Eval dovrebbe normalmente essere evitato, ma se sei sicuro che il contenuto è sicuro, allora non ci sono problemi.

Quindi basta semplicemente iterare sull'array normalmente.

for (var i = 0; i < myArray.length; i++) { 
    alert(myArray[i].Title); 
} 
2

La tua domanda si sente un po 'incompleta, ma penso che quello che stai cercando un modo di rendere il vostro JSON accessibili al codice:

se avete la stringa JSON come sopra, allora si' d solo bisogno di fare questo

var jsonObj = eval('[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]'); 

allora si può accedere a questi Vars con qualcosa di simile jsonObj [0] .id ecc

Fammi sapere se questo non è quello che si stavano diventando a e I'l Cerco di aiutare.

M

+2

Non dovresti usare eval() per analizzare JSON, lo sai? Usa JSON.parse(). – jpangamarca

+0

^Perché usando 'eval()' sei più vulnerabile dato che la funzione JS accetta tutte le espressioni JS (https://stackoverflow.com/questions/1843343/json-parse-vs-eval) – Remi

42

Questo non è un singolo oggetto JSON. Hai una serie di oggetti JSON. È necessario prima eseguire il loop sull'array e quindi accedere a ciascun oggetto. Forse l'esempio seguente calcio d'inizio è utile:

var arrayOfObjects = [{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]; 

for (var i = 0; i < arrayOfObjects.length; i++) { 
    var object = arrayOfObjects[i]; 
    for (var property in object) { 
     alert('item ' + i + ': ' + property + '=' + object[property]); 
    } 
    // If property names are known beforehand, you can also just do e.g. 
    // alert(object.id + ',' + object.Title); 
} 

Per saperne di più su JSON, controllare this article.

Aggiornamento: se l'array di oggetti JSON è effettivamente passato come una stringa plain vanilla, allora si avrebbe davvero bisogno di eval() qui.

var string = '[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]'; 
var arrayOfObjects = eval(string); 
// ... 
+5

Ricorda 'if (object.hasOwnProperty (... ' –

+0

+1 per l'aggiornamento eval(), sprecato così tanto tempo da non rendermi conto che avevo bisogno di convertire la stringa in un oggetto –

+1

@PeadarDoyle: prego, assicurati che questa stringa non contenga utente -controllare i dati, o si può rischiare l'iniezione del codice JS, ma sarebbe meglio passare in un oggetto JS completo già dall'inizio. Cioè rimuovere le virgolette che circondano la stringa -se qualsiasi reggiseno – BalusC

7

Questo è il tuo dataArray:

[ 
    { 
     "id":28, 
     "Title":"Sweden" 
    }, 
    { 
     "id":56, 
     "Title":"USA" 
    }, 
    { 
     "id":89, 
     "Title":"England" 
    } 
] 

Poi parseJson può essere utilizzato:

$(jQuery.parseJSON(JSON.stringify(dataArray))).each(function() { 
    var ID = this.id; 
    var TITLE = this.Title; 
}); 
0

@Swapnil Godambe Funziona per me se JSON.stringfy viene rimosso. Cioè:

$(jQuery.parseJSON(dataArray)).each(function() { 
    var ID = this.id; 
    var TITLE = this.Title; 
}); 
-1

var datas = [{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]; 
 
document.writeln("<table border = '1' width = 100 >"); 
 
document.writeln("<tr><td>No Id</td><td>Title</td></tr>"); 
 
for(var i=0;i<datas.length;i++){ 
 
document.writeln("<tr><td>"+datas[i].id+"</td><td>"+datas[i].Title+"</td></tr>"); 
 
} 
 
document.writeln("</table>");

Problemi correlati