Estoy tratando de recorrer la siguiente matriz json:
{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "[email protected]"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "[email protected]"
}
Y he intentado lo siguiente
for (var key in data) {
if (data.hasOwnProperty(key)) {
console.log(data[key].id);
}
}
Pero por alguna razón solo estoy obteniendo la primera parte, los valores de id 1.
¿Algunas ideas?
javascript
json
Alosyius
fuente
fuente
Respuestas:
Su JSON debería verse así:
Puede recorrer la matriz de esta manera:
O así (sugerido por Eric) tenga cuidado con el soporte de IE
fuente
json.forEach(function(obj) { console.log(obj.id); });
Hay algunos problemas en su código, primero su json debe verse así:
A continuación, puede iterar así:
Y da un resultado perfecto.
Vea el violín aquí: http://jsfiddle.net/zrSmp/
fuente
Cada método para una fácil implementación.
fuente
prueba esto
fuente
Como ya comencé a investigarlo:
Y esta funcion
Puedes llamarlo así
Actualización después del comentario de Erics
Como Eric señaló, un
for in
bucle para una matriz puede tener resultados inesperados . La pregunta referenciada tiene una larga discusión sobre pros y contras.Prueba con for (var i ...
Pero parece que lo siguiente es bastante seguro:
Aunque una prueba en cromo tuvo el siguiente resultado
Prueba con
.forEach()
Al menos en Chrome 30, esto funciona como se esperaba
Enlaces
for in
en el mdnfor in
menos malofuente
for ... in
bucles no deben usarse para matricesfor each
.for ... in ...
es una construcción de lenguaje para enumerar claves de objeto en un orden arbitrario. Esa no es la construcción correcta para una matriz.Está funcionando. Acabo de agregar corchetes a los datos JSON. Los datos son:
Y el bucle es:
fuente
Debe ser una matriz si desea iterar sobre ella. Es muy probable que te falte
[
y]
.Echa un vistazo a este jsfiddle: http://jsfiddle.net/lpiepiora/kN7yZ/
fuente
Un poco tarde pero espero poder ayudar a otros: D
tu json debe verse como algo que Niklas ya dijo. Y luego aquí tienes:
Si tiene una matriz multidimensional, este es su código:
fuente
Bueno, todo lo que puedo ver allí es que tienes dos objetos JSON, separados por una coma. Si ambos estuvieran dentro de una matriz (
[...]
) tendría más sentido.Y, si ESTÁN dentro de una matriz, simplemente estaría utilizando el tipo de bucle estándar "for var i = 0 ...". Tal como está, creo que intentará recuperar la propiedad "id" de la cadena "1", luego "id" de "hola", y así sucesivamente.
fuente
Una solución corta usando
map
y una función de flechaY para cubrir los casos en que la propiedad
"id"
no está presente usefilter
:fuente
oh mi ... ¿por qué todos hacen esto tan difícil?
su fragmento de datos debe expandirse un poco, y tiene que ser así para que sea el json adecuado. observe que acabo de incluir el atributo de nombre de matriz "elemento"
tu script java es simplemente
fuente