Concatenar JSON

1,149 views
Skip to first unread message

Anto

unread,
Feb 3, 2014, 7:37:06 AM2/3/14
to node...@googlegroups.com
hola

ya estoy de nuevo por aqui molestando :P. He estado dos dias pegandome con una funcion y consegui hacerla funcionar, no tal como queria de forma de buen programador, pero si para salir del paso, lo cual no ha tardado en fallar de vez en cuando. No encontre la forma de hacerlo, porque con concat y similares, me fallaba, tengo una funcion que llamo y me devuelve un json, asi hasta 6, asi que hice lo siguiente (omito cosas como el bucle y llamada a funcion para ahorrar texto en el email):

if(finalObj == undefined)
    finalObj = '[' + respuesta;
else
    finalObj = finalObj + ',' + respuesta;
                                
if(counter == members.length){
    finalObj = finalObj + ']';

Hasta aqui "bien" (por decir algo), aunque preferiria hacerlo de forma elegante o de buen programador. Luego en otra funcion, captura el contenido de la variable y recorro el bucle, aqui es donde algunas veces me falla (no se porque algunas veces):

doc = JSON.parse(finalObj);

doc.forEach(function(product){
.......................
});

Muchas veces, casi el 99% (luego almacena el valor en una variable durante unas horas y no falla mas) falla: TypeError: Object (JSON) has no method 'forEach'

Entiendo que es porque esta mal construido el JSON o procesado. ¿Alguien sabria decirme la forma correcta de sumar varios JSON? Porque me tire horas leyendo y solo encontraba ejemplos de jQuery y similares.

gracias.

Saludos
Anto

David Roncancio

unread,
Feb 3, 2014, 7:40:13 AM2/3/14
to node...@googlegroups.com

Quieres concatenar varios JSON en in array ? Puedes poner un poco mas de contexto de lo que quieres hacer ?

--
Has recibido este mensaje porque estás suscrito al grupo "NodeJS ES" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a nodejs-es+...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Anto

unread,
Feb 3, 2014, 7:52:34 AM2/3/14
to node...@googlegroups.com
hola

perdona que pensaba que con la funcion se veia. Tengo varios json almacenados en la db o en variables y quiero crear un json para procesar con una funcion (comprobar si esta activo, debe dinero, etc) y plasmarlo en la pantalla mandandoselo a jade.

Algo como:
{
blabla: 'Todo',
otramas: 'djdjdj'
}

y tener una variable final con:
[
{
blabla: 'Todo',
otramas: 'djdjdj'
},
{
blabla1: 'Todo',
otramas1: 'djdjdj'
},
{
blabla2: 'Todo',
otramas2: 'djdjdj'
},
{
blabla3: 'Todo',
otramas3: 'djdjdj'
}
]

Vamos, sumar los contenido, no crear un JSON que tenga entre { } las variables. No se si me explico bien porque no se si concatenar se refiere a meter entre llaves todo los valores o sumar sus contenidos. Le añado [ ] a sus extremos porque asi veo que lo hace la db y jade lo recorre bien.

Y si, tengo que actualizarme con javascript, aunque ya voy haciendo mis mejoras y aprendiendo hay cosas como estas que se me escapan...

Gracias.

saludos
antonio 

Angel Java Lopez

unread,
Feb 3, 2014, 7:59:56 AM2/3/14
to node...@googlegroups.com
Lei por arriba... pero primero, no se manda JSON a Jade, se mandan valores JavaScript, que pueden ser string, numeros, objectos, etc

Hay dos formas de interpretar "la funcion me devuelve un json":

- Me devuelve un string que representa un JSON (y por eso estas usando "[" + valor ... estas concatenando strings y necesitas hacerlo asi)
- Me devuelve un valor JavaScript

Si fuera lo segundo, y la funcion se llama pepe, y la llamas 6 veces con distintos parametros, basta poner

var result = [ pepe(1), pepe(2), .... pepe(6) ];

Pero hay que tener claro a que haces referencia con "tengo un json"

Nos leemos!

Angel "Java" Lopez
@ajlopez




2014-02-03 Anto <pot...@gmail.com>:

Anto

unread,
Feb 3, 2014, 10:02:48 AM2/3/14
to node...@googlegroups.com
Hola !

Si, un objeto, exacto es lo que mando a Jade.

Me refiero a que tengo una salida de la db que con console.log es { variable : 'loque sea', otravariable : 'otro valor' } que suelo almacenar en una variable para evitar peticiones a la db, salvo que este vacia (hay una funcion que borra su contenido).

luego la suma de 6 variables que corresponden a 6 registros, lo utilizo en otras partes del sistema, entonces lo almaceno en una variable y se me ocurrio hacerlo como cuando la db te devuelve varios registros, estuve leyendo sobre JSON.parse y demas, entonces se me ocurrio hacerlo asi.

Una seccion del sistema al que paso esta variable con la suma de los 6 registros ( [ { }, { }, ... ] ) pasa directamente a Jade el cual lo recorre bien con each y muestra el resultado, pero en otra parte de la web intento recorrerlo con un forEach ya que tengo que procesar algunos datos que contiene y provoca el fallo que muere node.

Entonces quiero saber si hay alguna forma de concatenar los json, objetos o similar de cada registro, sin tener que hacer como hago yo, haciendo un string.

Espero haberme explicado correctamente. gracias

saludos
anto.

David Roncancio

unread,
Feb 3, 2014, 10:32:14 AM2/3/14
to node...@googlegroups.com
puedes empujar todos los objetos a un Array con miArray.push(Obj), y luego jugar con ese array, sin tener que parsear objetos -> strings y luego strings a otro string(array), siempre es mucho mejor trabajar con objetos que con strings, tambien te recomiendo revisar underscore para jugar con listas/arreglos (underscorejs.org)

cordialmente, 

David Roncancio
(+57) 3014311354


2014-02-03 Anto <pot...@gmail.com>:

Anto

unread,
Feb 3, 2014, 12:15:30 PM2/3/14
to node...@googlegroups.com
hola

Perfecto, voy a ver como hacerlo y a probar. Vi lo de underscorejs pero como no sabia muy bien que era decidi hacerlo asi, porque pensaba que igual habia forma facil de hacerlo, al ser algo nativo de javascript. Otra que di para hacerlo con underscore, lo hice mediante codigo y funciono, pero voy a probar lo que me indicas y sino lo usare, porque que pegue los fallos que esta dando cada vez que ejecuta eso...

Saludos

Anto

unread,
Feb 5, 2014, 8:43:53 AM2/5/14
to node...@googlegroups.com
Hola

Bueno, hoy he podido ponerme con ello (he tenido que arreglar otras cosas de otra aplicacion que hizo un compañero en otro lenguaje) y he tenido que cambiar alguna cosa en el forEach, que no sabia que pasa salir de el habia que poner return (estaba poniendo break pero fallaba la aplicacion).

el procesamiento es correcto despues de cambiar las funciones para adaptarlas al push, me encuentro un problema en jade, que ahora no encuentra una variable.

El contenido que le mando al render (el array) contiene lo siquiente:

{ identificador: valor,
  variable: valor,
  variable: valor,
  variable: valor,
  variable: valor,  
  descripcion: 
   { name: valor,
     text: valor',
     _id: valor },
  variable: valor,
  variable: valor,
  variable: valor,
  __v: 0}
{ identificador: valor,
  variable: valor,
  variable: valor,
  variable: valor,
  variable: valor,  
  descripcion: 
   { name: valor,
     text: valor',
     _id: valor },
  variable: valor,
  variable: valor,
  variable: valor,
  __v: 0}

Entonces ahora es un array, que cada elemento contiene un ¿JSON?, y el problema es que antes usaba jade la variable que recorre con each (each valor in valores) el objeto, varJade.descripcion.name y me funcionaba pero ya no:

Cannot read property 'name' of undefined

He probado a dejarlo descripcion.name e incluso name, pero nada, Jade me dice que no esta definida. Voy a seguir buscando y leyendo a ver si doy con la solución, porque la verdad no tengo ni idea...

saludos
antonio


El 3 de febrero de 2014, 16:32, David Roncancio <david.r...@gmail.com> escribió:

David Roncancio

unread,
Feb 5, 2014, 9:07:50 AM2/5/14
to node...@googlegroups.com

David Roncancio
(+57) 3014311354


2014-02-05 Anto <pot...@gmail.com>:

Anto

unread,
Feb 5, 2014, 9:29:02 AM2/5/14
to node...@googlegroups.com
No entiendo :-S

Si yo lo tengo asi y recorre el array (cambie el jade para que me coloree segun pasa y coincide con el numero de elementos) el problema es que ahora no me muestra las variables. ni las de descripcion ni las otras... 

En cada elemento del array hay algo tal que asi:

{ identificador: valor,
  variable: valor,
  variable: valor,
  variable: valor,
  variable: valor,  
  descripcion: 
   { name: valor,
     text: valor',
     _id: valor },
  variable: valor,
  variable: valor,
  variable: valor,
  __v: 0}

y aun poniendo:

each varJade in elementos
  p= varJade.identificador

no muestra nada. Pienso que es por el anidamiento { }, supongo que por ahi estara el problema

voy a seguir peleandome a ver si descubro, sino volvere al codigo anterior de usar string, porque ahora no muestra nada :-S. gracias.


saludos

Anto

unread,
Feb 5, 2014, 1:06:35 PM2/5/14
to node...@googlegroups.com
es curioso, haciendo pruebas, si pongo varJade sin hacer referencia a ningun elemento, me imprime en pantalla el JSON (contenido del elemento del array), sino se queda en blanco y si hago varJade.elemento.name ya directamente arroja un fallo. Creo que al final lo hare con string, que es mucho mejor que falle de vez en cuando a no muestre nada, visto que no doy con ello. gracias a todos :)

saludos
anto

Anto

unread,
Feb 5, 2014, 2:09:02 PM2/5/14
to node...@googlegroups.com
Ya corregi el fallo con el string y lo dejo asi, lo malo que por mi interes de saber porque pasan las cosas me he quedado la duda porque no funciono el caso del array :-S

Saludos
anto
Reply all
Reply to author
Forward
0 new messages