Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Problema con for-in a un jSON

Estas en el tema de Problema con for-in a un jSON en el foro de Javascript en Foros del Web. Hola! Hago un JSON.parse() a una cadena que contiene un jSON. Ahora, quiero imprimir en pantalla todos los datos contenidos en el jSON. Lo intento ...
  #1 (permalink)  
Antiguo 03/05/2015, 16:11
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Problema con for-in a un jSON

Hola!


Hago un JSON.parse() a una cadena que contiene un jSON.

Ahora, quiero imprimir en pantalla todos los datos contenidos en el jSON.

Lo intento con un for in, pero sólo se muestran los primeros dos registros del jSON, no los jSON's contenidos dentro de esos dos.

Pondría el ejemplo en jsfiddle, pero parece que su servidor anda fallando.
Código Javascript:
Ver original
  1. var cadenaJSON = '{"Negras": [{"Nombre": "Martin Luther King"}, {"Nombre": "Malcolm X"}, {"Nombre": "Mohamed Ali"} ], "Blancas": [{"Nombre": "Arthur Schopenhauer"}, {"Nombre": "Hegel"}, {"Nombre": "Kant"} ] }';
  2.  
  3. var personas = JSON.parse(cadenaJSON);
  4.  
  5. for (var i in personas) {
  6.     document.write(i + ": " + personas[i] + "<br>");
  7.  
  8.     for (var x in personas[i]) {
  9.         document.write(x + ": " + personas[i][x] + "<br>");
  10.     }
  11. }

¿Alguna idea?
Saludos!
  #2 (permalink)  
Antiguo 03/05/2015, 16:30
Avatar de Elvixx10  
Fecha de Ingreso: agosto-2012
Mensajes: 40
Antigüedad: 11 años, 8 meses
Puntos: 1
Creo que tu código debería ir de la siguiente forma: personas['negras'][i]['nombre']
  #3 (permalink)  
Antiguo 03/05/2015, 17:06
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema con for-in a un jSON

El problema está en que te estás olvidando de recorrer a los objetos contenidos dentro de cada array.

Debería de ser así:

Código Javascript:
Ver original
  1. for (var i in personas) {
  2.     document.write(i + "<br>");
  3.     for (var x in personas[i]){
  4.         for (var y in personas[i][x]){
  5.             document.write(y + ": " + personas[i][x][y] + "<br>");
  6.         }
  7.     }
  8. }

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #4 (permalink)  
Antiguo 03/05/2015, 18:41
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: Problema con for-in a un jSON

Cita:
Iniciado por Alexis88 Ver Mensaje
El problema está en que te estás olvidando de recorrer a los objetos contenidos dentro de cada array...
Uh, caray! Pues pensé que lo estaba haciendo con el 2do for !

Pero no, entonces son 3 niveles de objetos, ¿correcto?:
  1. Negras y blancas
  2. Cada uno de los jSON's contenidos dentro de negras y blancas
  3. Los pares clave-valor dentro de los últimos jSON's

Saludos!
  #5 (permalink)  
Antiguo 03/05/2015, 18:48
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema con for-in a un jSON

Ahora que lo veo con más calma, no es necesario un tercer bucle. Como conoces el nombre de la propiedad, la puedes leer directamente.

Código Javascript:
Ver original
  1. for (var i in personas) {
  2.     document.write(i + "<br>");
  3.     for (var x in personas[i]){
  4.         document.write("Nombre: " + personas[i][x]["Nombre"] + "<br>");        
  5.     }
  6. }

Y podrías hacer lo mismo si hay más propiedades. La limitante estaría cuando los nombres de las propiedades varíen y ahí sí te convendría usar el tercer bucle, pero para este caso, es suficiente con hacerlo así.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: json
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:18.