Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Leer archivo .ini Fito PowerCOBOL (ActiveX, v4 - v11) 7 10 de julio de 2023 14:55
[PowerCOBOL] Código para recibir archivo json y leerlo fastpho Cocina PowerCOBOL 24 13 de octubre de 2022 21:35
[PowerCOBOL] Código para crear archivo Json fastpho Cocina PowerCOBOL 11 16 de noviembre de 2021 20:24
[Duda] Leer archivo AcuCobol con PowerCobol Roger PowerCOBOL (ActiveX, v4 - v11) 7 28 de septiembre de 2016 10:44
[Sintaxis] Leer archivo texto con codificacion UTF-8 Recato53 PowerCOBOL (ActiveX, v4 - v11) 1 18 de abril de 2016 10:47

Respuesta
 
Herramientas

  #1
Antiguo 2 de mayo de 2023, 22:52
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243
Predeterminado Leer dato en un archivo Json con Chilkat...
0 Inactivo Inactivo

Hola Amigos:

Acá les paso una parte de un archivo json (no está completo, le deben faltar cerrar estructuras).

Código COBOL:
  1. {
  2.     "success": true,
  3.     "numberOfItems": 1000,
  4.     "data": [{
  5.                 "c": {
  6.                     "visit": null,
  7.                     "dLine": null,
  8.                     "ivr": null,
  9.                     "dk": null,
  10.                     "eg": null,
  11.                     "p": {
  12.                         "01": {
  13.                             "k": "01",
  14.                             "n": "",
  15.                             "p": ""
  16.                         }
  17.                     },
  18.                     "rk": "414338",
  19.                     "pl": "0001",
  20.                     "tc": null,
  21.                     "sc": null,
  22.                     "fn": null,
  23.                     "t": null,
  24.                     "n": "AUTOSERVICIO EL GRINGO",
  25.                     "rc": null,
  26.                     "ta": null,
  27.                     "bn": "AUTOSERVICIO EL GRINGO",
  28.                     "su": null,
  29.                     "it": "DNI",
  30.                     "e": null,
  31.                     "f": null,
  32.                     "b": null,
  33.                     "s": {
  34.                         "0025": true
  35.                     },
  36.                     "freq": null,
  37.                     "or": null,
  38.                     "de": null,
  39.                     "i": null,
  40.                     "a": {
  41.                         "01": {
  42.                             "a": "LEARTE 518  ESQ ALBERTI",
  43.                             "k": "01",
  44.                             "n": "CORDOBA",
  45.                             "s": "Cordoba",
  46.                             "z": "5000"
  47.                         }
  48.                     },
  49.                     "k": "414338"
  50.                 },
  51.                 "py": {
  52.                     "a01": {
  53.                         "m": 0,
  54.                         "a": "4179.75",
  55.                         "t": 1672662427727,
  56.                         "k": "a01"
  57.                     }
  58.                 },
  59.                 "impdoc": {
  60.                     "0001701000100225728X": {
  61.                         "createdAt": 1672504338523,
  62.                         "dc": "FC",
  63.                         "da": 4180,
  64.                         "rk": "0001701000100225728X      ",
  65.                         "saldo": 4179.75,
  66.                         "te": 1672747200000,
  67.                         "s": "0025",
  68.                         "q": {
  69.                             "01": {
  70.                                 "k": "01",
  71.                                 "ia": 4179.75,
  72.                                 "pa": 0,
  73.                                 "qn": "01",
  74.                                 "te": 1672747200000,
  75.                                 "selected": true,
  76.                                 "py": 4179.75
  77.                             }
  78.                         },
  79.                         "tc": 1672142400000,
  80.                         "bn": "AUTOSERVICIO EL GRINGO",
  81.                         "do": "0001",
  82.                         "updatedAt": 1672504338523,
  83.                         "k": "0001701000100225728X",
  84.                         "cn": "AUTOSERVICIO EL GRINGO",
  85.                         "c": "414338",
  86.                         "co": null,
  87.                         "url": null,
  88.                         "dt": "FC",
  89.                         "dn": "00225728",
  90.                         "mo": "2",
  91.                         "k2": null,
  92.                         "dd": null,
  93.                         "st": {}
  94.                     }
  95.                 },
  96.                 "p": {
  97.                     "c": {
  98.                         "la": -31.415711666666667,
  99.                         "lo": -64.136835
  100.                     },
  101.                     "m": false
  102.                 },
  103.                 "envId": "eE8Hj9Ob1p",
  104.                 "st": 0,
  105.                 "fk": "00251672662427727",
  106.                 "l": "1342",
  107.                 "ta": "4179.75",
  108.                 "ap": null,
  109.                 "r": "null",
  110.                 "s": "0025",
  111.                 "t": 1672662427727,
  112.                 "sk": "0025230002092707",
  113.                 "createdAt": "2023-01-02T12:27:05.315Z",
  114.                 "updatedAt": "2023-01-02T12:27:05.315Z"
  115.             }

Si buscan el campo "impdoc" van a ver que adentro hay un abjeto "0001701000100225728X" este objeto es variable, no siempre se llama igual y no logro cómo puedo leerlo para poder dirigirme a los datos que hay dentro. Si pongo ese valor funciona, pero ese valor no lo sé, porque se compone de datos de un comprobante. En síntesis tengo que lograr leer el dato "impdoc" y poder saber qué tiene adentro.

No sé si me expliqué bien. Cualquier cosa me preguntan.

Para leer los json estoy usando el activex de chilkat. En este foro hay unos ejemplos, pero ninguno tiene la estructura esta.

Saludos

Fito...
Fito is offline   Responder Con Cita
  #2
Antiguo 2 de mayo de 2023, 23:41
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@Fito, si no entiendo mal dices que dentro de "impdoc" hay un subJson cada vez diferente a "0001701000100225728X" y supongo que dentro de este subJson (cada vez diferente) las etiquetas si serán ya iguales.

Yo en cobol no utilizo Json pero si en C# y yo haria esto:

1) cogería el contenido de "impdoc"
2) podria leer la primera etiqueta que en este caso es "0001701000100225728X"
3) deserializaría el contenido en una clase (que supongo que sera siempre sería igual)

En cobol ( como no tengo utilizades para acceder)

1) cogería el contenido de "impdoc"
2) cambiaria la descripción de la etiqueta "0001701000100225728X" por una fija. (guardando este contenido si hay que utilizarlo)
3) y trataría el json

No se si esto te sirve.

A ver si algún forero tiene otra idea mas adecuada.
JCantero is offline   Responder Con Cita
  #3
Antiguo 4 de mayo de 2023, 21:52
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola @JCantero,

El tema es que no sé cómo leer esa etiqueta, porque con la etiqueta leo el contenido, pero la etiqueta en si, no.

No quería recurrir al windev para esto, quería tenerlo todo en cobol. Pero me parece que no me va a quedar otra si lo quiero resolver rápido.

Saludos.

Fito...
Fito is offline   Responder Con Cita
  #4
Antiguo 5 de mayo de 2023, 10:08
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@Fito, el contenido de "impdoc" lo puedes coger perfectamente.

Una vez tengas ese contenido ( en un string por ejemplo ) analiza la etiqueta variable y el resto.

Pasa el resto a tu proceso como un Json y creo que lo tienes resuelto.
JCantero is offline   Responder Con Cita
  #5
Antiguo 5 de mayo de 2023, 14:18
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

Hola @Fito te paso un ejemplo como recorrer los miembros inmediatos de un objeto JSON.
Con el metodo
Código:
NameAt
, obtenemos el nombre del miembro N
Con el metodo
Código:
StringAt
, devuelve el valor de cadena del miembro N
Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  01 ReturnValue  PIC s9(9) comp-5.
  3.  01 I            PIC 99.
  4.  01 lSIZE        pic s9(9) comp-5.
  5.  01 txtNAME      PIC X(50).
  6.  01 txtValue     PIC X(1024).
  7.  PROCEDURE       DIVISION.
  8.        INVOKE ChilkatJsonObject2 "LoadFile" USING "JSON.txt" RETURNING ReturnValue.
  9.        display "ReturnValue : " , ReturnValue.
  10.        
  11.        MOVE "Size" OF ChilkatJsonObject2 TO lSIZE.
  12.        display "lSIZE : " , lSIZE.
  13.        MOVE 0 TO I.
  14.        PERFORM VARYING I  FROM 0 BY 1  UNTIL I  = lSIZE
  15.        DISPLAY "I: " , I
  16.              INVOKE ChilkatJsonObject2 "NameAt" USING I RETURNING txtNAME
  17.              DISPLAY "NAME : " , txtNAME
  18.              INVOKE ChilkatJsonObject2 "StringAt" USING I RETURNING txtValue
  19.              DISPLAY "VALUE : " , txtvalue
  20.        END-PERFORM.
Espero te sirva
Saludos ...
fastpho is offline   Responder Con Cita
  #6
Antiguo 11 de agosto de 2023, 16:14
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola:

Saben si existe algún método para verificar si determinado campo existe en el archivo Json? Porque me da error de tipo de dato,

Saludos

Fito...
Fito is offline   Responder Con Cita
  #7
Antiguo 14 de agosto de 2023, 16:33
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

Hola @Fito : probaste con el metodo
Cita:
FindRecordString
te paso un link : https://www.chilkatsoft.com/refdoc/x....html#method35
ejemplo en vb : https://www.example-code.com/vb6/jso...ord_string.asp

Saludos ...

pd: pudiste resolver (Si buscan el campo "impdoc" van a ver que adentro hay un objeto "0001701000100225728X" este objeto es variable) ?
fastpho is offline   Responder Con Cita
  #8
Antiguo 14 de agosto de 2023, 16:38
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola @fastpho,

Ese proyecto lo tengo en el freezer, no seguí por ahora. Voy a ver si con ese método soluciono lo otro,

Gracias

Saludos

Fito...
Fito is offline   Responder Con Cita
  #9
Antiguo 14 de agosto de 2023, 16:49
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

@Fito, podes probar con
Cita:
ChilkatStringBuilder
. con el metodo
GetAfterBetween

Código COBOL:
  1.        move 'impdoc' to searchAfter(1:6).
  2.        move '{'     to beginMark(1:1)
  3.        move ':'         to endMark(1:1)
  4.        INVOKE ChilkatStringBuilder1 "GetAfterBetween" USING searchAfter beginMark endMark
Saludos...
fastpho is offline   Responder Con Cita
  #10
Antiguo 26 de septiembre de 2023, 21:54
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola @fastpho,

Estoy retomando este proyecto. Ahí logré hacer lo que quería, pero tuve que trabajar con COM. Porque necesité generar un objeto desde otro objeto para poder usar el "NameAt".

Anduvo bien. Muchas Gracias.

Saludos

Fito...
Fito is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:16.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.