Foros del Web » Programando para Internet » Javascript »

Recorrer cadena JSON

Estas en el tema de Recorrer cadena JSON en el foro de Javascript en Foros del Web. Buenas, Estoy tratando de recorrer una cadena JSON que proviene de un select a una tabla de sqlite3. Solo necesito desplegar el campo "tile_data", pero ...
  #1 (permalink)  
Antiguo 14/10/2015, 08:09
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 8
Recorrer cadena JSON

Buenas,
Estoy tratando de recorrer una cadena JSON que proviene de un select a una tabla de sqlite3.

Solo necesito desplegar el campo "tile_data", pero de la forma en que lo estoy haciendo no me funciona

Este es mi codigo:

Código HTML:
Ver original
  1. <textarea id="res" rows="50" cols="200"></textarea>

Código Javascript:
Ver original
  1. loadBinaryFile('./database.sqlite', function(data){
  2.         var db = new SQL.Database(data);
  3.         var res = db.exec("SELECT  zoom_level,tile_column, tile_row,hex(tile_data) tile_data FROM tiles WHERE zoom_level=4 ORDER BY  zoom_level, tile_column, tile_row");
  4.  
  5.         var obj = JSON.stringify(res);
  6.  
  7. /* este es el formato del JSON
  8. var obj = "[{
  9. "columns":["zoom_level","tile_column","tile_row","tile_data"],
  10. "values":[
  11.  [4,4,4,"89504E470D0A1A0A0000000D49484452000001000000010008060000005C71"]
  12. ,[4,4,5,"89504E470D0A1A0A0000000D49484452000001000000010008060000005C72"]
  13. ,[4,4,6,"89504E470D0A1A0A0000000D49484452000001000000010008060000005C73"]
  14. ,[4,4,7,"89504E470D0A1A0A0000000D49484452000001000000010008060000005C74"]
  15. ,[4,5,4,"89504E470D0A1A0A0000000D49484452000001000000010008060000005C75"]
  16. ,[4,5,5,"89504E470D0A1A0A0000000D49484452000001000000010008060000005C76"]
  17. ,[4,5,6,"89504E470D0A1A0A0000000D49484452000001000000010008060000005C77"]
  18. ,[4,5,7,"89504E470D0A1A0A0000000D49484452000001000000010008060000005C78"]
  19. }]"
  20. */
  21.         document.getElementById("res").value = obj;
  22.        
  23.         for (var key in obj){
  24.             if (obj.hasOwnProperty(key))
  25.             {
  26.                 alert(key + " = " + obj[key]);
  27.    
  28.             }
  29.         }
  30.        
  31.     });

Gracias de antemano!
__________________
18 laaaaargos años en FDW... y soy de los pocos que ví correr sangre! :X
  #2 (permalink)  
Antiguo 14/10/2015, 09:58
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: Recorrer cadena JSON

Tienes un objeto dentro de un array, por eso lo que recorres es a dicho array y no al objeto que contiene. Dado a que, por lo que muestras, es el único elemento en el array, toma la primera posición del mismo y recórrelo:

Código Javascript:
Ver original
  1. for (var key in obj[0]){
  2.     //...
  3. }

Un saludo
__________________
«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
  #3 (permalink)  
Antiguo 14/10/2015, 10:28
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 8
Respuesta: Recorrer cadena JSON

Modifique la linea de codigo asi:
Código Javascript:
Ver original
  1. for (var key in obj[0]){
  2.             if (obj.hasOwnProperty(key))
  3.             {
  4.                 alert(key + " = " + obj[key]);
  5.    
  6.             }
  7.         }

Y me desplega un unico alert con el siguiente texto:
Código Javascript:
Ver original
  1. 0 = [
__________________
18 laaaaargos años en FDW... y soy de los pocos que ví correr sangre! :X
  #4 (permalink)  
Antiguo 14/10/2015, 10:56
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 8
Respuesta: Recorrer cadena JSON

cabe mencionar que base mi codigo en el siguiente demo:
http://alasql.org/demo/016sqlite/
__________________
18 laaaaargos años en FDW... y soy de los pocos que ví correr sangre! :X
  #5 (permalink)  
Antiguo 14/10/2015, 11: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: Recorrer cadena JSON

Si vas a tomar al primer elemento del array al inicio del bucle, por lógica, también tienes que hacerlo dentro de él.
__________________
«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
  #6 (permalink)  
Antiguo 14/10/2015, 13:16
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 8
Respuesta: Recorrer cadena JSON

Sigue sin funcionar :S

Código Javascript:
Ver original
  1. for (var key in obj[0]){
  2.             if (obj[0].hasOwnProperty(key))
  3.             {
  4.                 alert(key + " => " + obj[0][key]);
  5.    
  6.             }
  7.         }
__________________
18 laaaaargos años en FDW... y soy de los pocos que ví correr sangre! :X
  #7 (permalink)  
Antiguo 14/10/2015, 13:32
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Respuesta: Recorrer cadena JSON

var values = obj[0].values; // Necesitas acceder a los values del objeto respuesta

for (var key in values) {
alert(values[key][3]) // "tile_data" es la posición 3 en el array elemento del array values
}

Saludos!
  #8 (permalink)  
Antiguo 14/10/2015, 13:45
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 3 meses
Puntos: 8
Respuesta: Recorrer cadena JSON

tampoco... ni siquiera muestra el alert! :(

Código Javascript:
Ver original
  1. var obj = JSON.stringify(res);
  2.         var values = obj[0].values;
  3.         for (var key in values) {
  4.             alert(values[key][3]);
  5.         }
__________________
18 laaaaargos años en FDW... y soy de los pocos que ví correr sangre! :X
  #9 (permalink)  
Antiguo 14/10/2015, 14:11
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Respuesta: Recorrer cadena JSON

1. Con var obj = JSON.stringify(res); estas convirtiendo el objeto json en cadena(JSON.stringify hace eso), así no puedes acceder a sus elementos json

2. Suponiendo que el json que te devuelve es válido entonces directamente tienes que acceder a "res"

var values = res[0].values;
for (var key in values) {
alert(values[key][3]);
}

3. En todo caso si conviertes "res" a cadena con JSON.stringify, asumiendo que "obj" ya es una cadena, puedes convertir esa cadena a json con:

var res = JSON.parse(obj);

Saludos!
  #10 (permalink)  
Antiguo 14/10/2015, 14:46
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: Recorrer cadena JSON

¿Qué se muestra en la consola del navegador (pulsa F12) para las siguientes líneas?

Código Javascript:
Ver original
  1. console.log(typeof obj);
  2. console.log(typeof obj[0]);
  3. console.log(obj[0].values);
__________________
«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
  #11 (permalink)  
Antiguo 15/10/2015, 09:23
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Recorrer cadena JSON

Puede que sea porque lo estoy viendo en un móvil pero el array no está bien formado. Falta un corchete de cierre

Por otro lado, creo que debería de ser obj[0]['valores'][0][3]
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #12 (permalink)  
Antiguo 15/10/2015, 16:11
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Respuesta: Recorrer cadena JSON

Cita:
Iniciado por IsaBelM Ver Mensaje
Puede que sea porque lo estoy viendo en un móvil pero el array no está bien formado. Falta un corchete de cierre

Por otro lado, creo que debería de ser obj[0]['valores'][0][3]
La verdad si le falta un corchete como indica, no lo habrá copiado bien supongo, aunque creo que lo puso como ejemplo para ver la estructura del json, que lo más probable es que ese método exec si devuelve un json válido y en realidad sería obj[0]['values'][key][3] según la estructura del json, y bueno cachear obj[0]['values'] en una variable es una buena práctica por tema de "rendimiento".

Saludos.
  #13 (permalink)  
Antiguo 16/10/2015, 05:43
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Recorrer cadena JSON

bueno, es raro que el corchete que falte sea el de cierre de la matriz del segundo key, pero todo puede ser.

una matriz no puede ser accedida por un key. esta ha de ser accedida por un indice
Cita:
Array.prototype.forEach.call(obj[0]['values'], function(v, i, a) {
console.log(a[i][3]);
});
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #14 (permalink)  
Antiguo 16/10/2015, 07:56
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 2 meses
Puntos: 10
Respuesta: Recorrer cadena JSON

En efecto, tal vez en vez de key le hubiese colocado index o i para evitar confusiones, asumiendo que obj es un json válido y no una cadena:

Código Javascript:
Ver original
  1. for (var i in obj[0].values) {
  2.     console.log(obj[0].values[i][3]);
  3. }
donde i es el índice del array

considero que ambas soluciones(la de IsaBelM) son válidas

Saludos!
  #15 (permalink)  
Antiguo 16/10/2015, 17:11
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: Recorrer cadena JSON

Si el array obtenido es como el de la página que dejaste, no es necesario hacer el parseo. Tampoco veo necesario el uso del método .hasOwnProperty(), pues, no tiene sentido comprobar la existencia de cada propiedad del objeto en el mismo objeto, a menos de que estés buscando alguno en particular, pero no parece ser el caso.

Lo único que quedaría por hacer es, primero, ubicar al objeto dentro del array principal, luego, ubicar la propiedad "values" y, finalmente, recorrer el array de arrays que contiene, tomando al cuarto elemento de cada array hijo.

Código Javascript:
Ver original
  1. obj[0].values.forEach(function(array){
  2.     console.log(array[3]);
  3. });

DEMO

Un saludo
__________________
«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, loop
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 06:46.