2010-05-09 16 views
23

Tengo una función que obtendrá una matriz JSON con objetos. En la función, podré recorrer la matriz, acceder a una propiedad y usar esa propiedad. De esta manera:Usar una matriz JSON con objetos con javascript

variable que pasaré a la función se verá así:

[{"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 
} 

Alguna sugerencia de cómo puedo solucionarlo?

+0

la pregunta no es clara. proporcionar un código más preciso y descriptivo. –

Respuesta

3

Por 'matriz JSON que contiene objetos' Supongo que quiere decir una cadena que contiene JSON?

Si es así, puede utilizar el método var myArray = JSON.parse(myJSON) seguro (ya sea nativo o incluido usando JSON2), o el usafe var myArray = eval("(" + myJSON + ")"). eval debe evitarse normalmente, pero si está seguro de que el contenido es seguro, entonces no hay problema.

Después de eso, simplemente itera sobre la matriz de forma normal.

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

Su pregunta se siente un poco incompleta, pero creo que lo que estás buscando es una manera de hacer que su JSON puede acceder a su código:

si usted tiene la cadena JSON que el anterior, entonces' d sólo tiene que hacer esto

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

entonces se puede acceder a estos VARs con algo como jsonObj [0] .id etc

Avisadme si eso no es lo que estaban haciendo en y I'l Trato de ayudar.

M

+2

No debe usar eval() para analizar JSON, ¿lo sabe? Use JSON.parse(). – jpangamarca

+0

^Porque usando 'eval()' eres más vulnerable ya que esa función JS acepta todas las expresiones JS (https://stackoverflow.com/questions/1843343/json-parse-vs-eval) – Remi

42

Esto no es un solo objeto JSON. Tienes una matriz de objetos JSON. Primero debe recorrer el arsenal y luego acceder a cada objeto. Tal vez el ejemplo siguiente patada de salida es útil:

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); 
} 

Para obtener más información sobre JSON, comprobar this article.

Actualización: si la matriz de objetos JSON se transfiere realmente como una cadena simple, entonces de hecho necesitaría eval() aquí.

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

Recuerda 'if (object.hasOwnProperty (... ' –

+0

+1 para actualización de eval(), perdí tanto tiempo sin darme cuenta que necesitaba convertir la cadena en un objeto. –

+1

@PeadarDoyle: de nada. Por favor, asegúrese de que esta cadena no contenga usuario -controlada de datos, o puede poner en riesgo la inyección de código JS. Pero sería mejor pasar un objeto JS de pleno valor desde el principio. Es decir, eliminar las comillas que rodean la cadena -si hay alguno. – BalusC

7

Ésta es su dataArray:

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

Entonces parseJson se puede utilizar:

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

@Swapnil Godambe Funciona para mí si se elimina JSON.stringfy. Es decir:

$(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>");

Cuestiones relacionadas