Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] JSON en Cobol... (https://www.cobolforo.es/showthread.php?t=779)

Fito 7 de diciembre de 2017 18:44

JSON en Cobol...
 
1 Archivos Adjunto(s)
Hola Amigos:

Un cliente contrató un servicio web y para enviar y recibir datos (articulos, clientes, pedidos), tengo que utilizar una API que tienen y pasale y recibir parámetros en JSON. Adjunto un pdf con la explicación.

Mis conocimientos web son mínimos. Quisiera saber si alguien me puede ayudar como hacer esto.

Muchas Gracias.

Fito...

Fito 8 de diciembre de 2017 20:30

Hola:

Buscando encontré este aporte de Rapinto, me parece que acá está la forma o me equivoco.

[Aporte] Ligar ao Site da União Europeia VAT Number - COBOL Foro

Kuk 9 de diciembre de 2017 11:15

Fito, el JSON no es otra cosa que un formato definido. Sigue tratándose de datos en texto plano. En cuanto a la POST request, efectivamente, se puede adaptar los ejemplos que hay en el foro y hacerlas vía COM/OLE2. Así que, no te será fácil al principio, pero es, según yo, perfectamente realizable.

Fito 14 de diciembre de 2017 15:26

Hola Amigos:

Les cuento que gracias al ejemplo de Rapinto y un poco de google, logré comunicarme con la api. Ahora estoy esperando que me envíen un token valido para empezar a probar a full.

Cuando tenga todo listo, voy a subir un ejemplo.

Saludos.

Fito...

---------- Post añadido : 11:26 ---------- Post anterior : 21:14 ----------

Hola Amigos:

Ya logré comunicarme con el webservice, enviarle parámetros y recibir la respuesta.

Esa respuesta está en un json, ahora la tarea es "entender" ese json. Hacerlo en Cobol me parece muy complicado.

Buscando, buscando y buscando, me topé con esto.

[Aporte] Google Maps localización - COBOL Foro

Pregunto a lo mejor una burrada, porque estos temas todavía escapan a mi cerebro.

De acuerdo a este ejemplo, yo podría trabajar el json en javascript, donde tengo buen manejo de este tipo de dato, pasarlo a un txt tipo tabla, y esa funcion llamarla desde cobol. Estoy muy errado? después leería ese txt desde cobol y santo remedio.

Diagn que si, jajajajaja.

Saludos.

Fito...

Rapinto 15 de diciembre de 2017 01:00

Fito,

Não me parece muito complicado fazer uma rotina para abrir o ficheiro de texto
e tentar interpretar :
"PH_CODIGO": "02220160513111442",
"CL_CODIGO": "01554",
"PH_FECINI": "2016-05-13", .......

Se usares o unstring ou o perform varying ... talvez seja fácil, leres a informação que precisas.

Un Saludo,
Rui Pinto

Fito 15 de diciembre de 2017 15:54

Hola Rui:

Sé que se puede hacer con cobol, el tema es el tiempo. Hacer y probar una rutina para interpretar el JSON me va a llevar mucho tiempo, que no tengo. Hay que tener en cuenta niveles, arrays y todas esas cosas. Cuando otros lenguajes lo tienen solucionado de manera sencilla.

En windev, por medio de una función (JSONtoVariant()) lo pasas a un array tipo variant y después con bucles anidados vas sacando todo. Por eso hice un exe en windev, que me lea el JOSN que lo grabo en un archivo, lo proceso y lo meto en otro archivo ya con el formato tipo tabla para leerlo desde cobol, trabajarlo así tipo batch.

Te pego un ejemplo (esto es una pequeña prueba, tengo que desarrollarlo para darle formato de tabla al txt de salida).
Código WinDev:
  1. VP is Variant = JSONToVariant(sJson)
  2.  
  3. FileId = fCreate("d:\yeison\verpedidos.txt",foReadWrite)
  4.  
  5. FOR EACH m OF VP..Member
  6.     LineRead = m..Name
  7.     fWriteLine(FileId, LineRead)   
  8.     FOR EACH m2 OF m..Member
  9.         LineRead = "   --1--   " + m2..Name
  10.         fWriteLine(FileId, LineRead)
  11.         IF m2..Name = "cabecera" THEN
  12.             FOR EACH m3 OF m2..Member
  13.                 LineRead = "   --2--    "+m3..Name +":"+ m3..Value
  14.                 fWriteLine(FileId, LineRead)   
  15.             END
  16.         ELSE
  17.             FOR i = 1 TO m2..Occurrence
  18.                 FOR EACH m3 OF m2[i]..Member
  19.                     LineRead = "   --3--    "+m3..Name +":"+ m3..Value
  20.                     fWriteLine(FileId, LineRead)   
  21.                    
  22.                 END
  23.             END
  24.         END
  25.     END
  26. END
  27.  
  28. fClose(FileId)

Muchas gracias por los aportes. Sigo probando y cuando tenga todo listo posteo el resultado.

Saludos.

Fito...

AHidalgo 2 de junio de 2021 20:22

Ayuda: desde Power Cobol conectar a una API
 
Cita:

Citación del post de Fito (Mensaje 3813)
Hola Rui:

Sé que se puede hacer con cobol, el tema es el tiempo. Hacer y probar una rutina para interpretar el JSON me va a llevar mucho tiempo, que no tengo. Hay que tener en cuenta niveles, arrays y todas esas cosas. Cuando otros lenguajes lo tienen solucionado de manera sencilla.

En windev, por medio de una función (JSONtoVariant()) lo pasas a un array tipo variant y después con bucles anidados vas sacando todo. Por eso hice un exe en windev, que me lea el JOSN que lo grabo en un archivo, lo proceso y lo meto en otro archivo ya con el formato tipo tabla para leerlo desde cobol, trabajarlo así tipo batch.

Te pego un ejemplo (esto es una pequeña prueba, tengo que desarrollarlo para darle formato de tabla al txt de salida).
Código WinDev:
  1. VP is Variant = JSONToVariant(sJson)
  2.  
  3. FileId = fCreate("d:\yeison\verpedidos.txt",foReadWrite)
  4.  
  5. FOR EACH m OF VP..Member
  6.     LineRead = m..Name
  7.     fWriteLine(FileId, LineRead)   
  8.     FOR EACH m2 OF m..Member
  9.         LineRead = "   --1--   " + m2..Name
  10.         fWriteLine(FileId, LineRead)
  11.         IF m2..Name = "cabecera" THEN
  12.             FOR EACH m3 OF m2..Member
  13.                 LineRead = "   --2--    "+m3..Name +":"+ m3..Value
  14.                 fWriteLine(FileId, LineRead)   
  15.             END
  16.         ELSE
  17.             FOR i = 1 TO m2..Occurrence
  18.                 FOR EACH m3 OF m2[i]..Member
  19.                     LineRead = "   --3--    "+m3..Name +":"+ m3..Value
  20.                     fWriteLine(FileId, LineRead)   
  21.                    
  22.                 END
  23.             END
  24.         END
  25.     END
  26. END
  27.  
  28. fClose(FileId)

Muchas gracias por los aportes. Sigo probando y cuando tenga todo listo posteo el resultado.

Saludos.

Fito...

Estimados, les dejo la consulta para saber si pudieron resolver esto. Estoy con el mismo problema y no encuentro soluciones directas. Quiero desde Power Cobol conectarme a una API para bajar las ventas en la nube (me devuelve un json) e incorporarlas a mi sistema windows, ahora se hace manualmente y es una pérdida de tiempo.
Me podrán ayudar por favor?

Saludos
Ana

---------- Post añadido : 15:22 ---------- Post anterior : 12:32 ----------

@Kuk, Help!, me podrás ayudar? :nauf:

Saludos
Ana

Kuk 2 de junio de 2021 20:57

@AHidalgo, hola.
Qué problema tienes exactamente? Para descargar el JSON o parsearlo?

AHidalgo 2 de junio de 2021 21:33

@Kuk, hola, gracias por responder, empecemos desde el principio, probé algunas formas de conectarme a la API y aún no me funcionaron, si conoces alguna forma desde cobol directamente te lo agradecería.

Saludos
Ana

Kuk 2 de junio de 2021 23:21

@AHidalgo, nunca lo he hecho, pero creo que se podrá hacer de manera similar a esto: [Aporte] Ligar ao Site da União Europeia VAT Number - COBOL Foro

Aquí se trata de WSDL Soap, pasando por la clase COM de PowerCOBOL.

Tendrías que mirar ejemplos de cómo trabajar con JSON, pero al fin y al cabo sigue siendo una request HTTP también, o sea que debería funcionar.

Amigos, @Josber, @Nitzer, qué opináis?

Una vez el JSON obtenido, miraremos cómo parsearlo (creo recordar que hay bibliotecas en el foro, o lo mismo estudiamos cómo hacerlo por Java por ejemplo).


La franja horaria es GMT +2. Ahora son las 14:38.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.