Ver Mensaje Individual
  #20
Antiguo 11 de octubre de 2022, 05:21
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 22.09.2026 04:22
Posts Posts: 458
Likes enviados Enviados: 269
Likes recibidos Recibidos: 243

Hola amigos:

Tengo el siguiente ejemplo de un json que quiero decodificar.

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  
  5.  01  wcobranza.
  6.      02 pic x(50)    value '{'.
  7.      02 pic x(50)    value '  "ALUMNO": "Chiavazza Adolfo Carlos",'.
  8.      02 pic x(50)    value '  "DNI": "22222222",'.
  9.      02 pic x(50)    value '  "FECHA": "10-03-2022",'.
  10.      02 pic x(50)    value '  "COBRANZA": ['.
  11.      02 pic x(50)    value '    {'.
  12.      02 pic x(50)    value '      "TIPO": 1,'.
  13.      02 pic x(50)    value '      "PERIODO": "03-2022",'.
  14.      02 pic x(50)    value '      "IMPORTE": 5000'.
  15.      02 pic x(50)    value '    },'.
  16.      02 pic x(50)    value '    {'.
  17.      02 pic x(50)    value '      "TIPO": 2,'.
  18.      02 pic x(50)    value '      "PERIODO": "03-2022",'.
  19.      02 pic x(50)    value '      "IMPORTE": 1000.02'.
  20.      02 pic x(50)    value '    }'.
  21.      02 pic x(50)    value '  ]'.
  22.      02 pic x(50)    value '}'.
  23.      
  24.  01  jfecha                 pic x(10).
  25.  01  redefines jfecha.
  26.      02 jfecha-dd           pic 99.
  27.      02                     pic x.
  28.      02 jfecha-mm           pic 99.
  29.      02                     pic x.
  30.      02 jfecha-aa           pic 9999.
  31.      
  32.  01  wfecha                 pic 9(8).
  33.  01  redefines wfecha.
  34.      02 wfecha-aa           pic 9999.
  35.      02 wfecha-mm           pic 99.
  36.      02 wfecha-dd           pic 99.
  37.  
  38.  01  indA                   pic s9(9) comp-5 value zeros.
  39.  01  w--ii                  pic 9(8).
  40.  01  dato                   pic x(200).
  41.  
  42.  01  wdatos.
  43.      02 wtipo               pic 999.
  44.      02 wperiodo            pic x(7).
  45.      02 wimporte            pic 9(9)v99.
  46.      02 l-importe           pic z(9),zz.
  47.  
  48.  PROCEDURE       DIVISION.
  49.  
  50.  comienzo.
  51.      invoke json "Clear".
  52.  
  53.      invoke json "Load" using wcobranza.
  54.      
  55.      invoke json "StringOf" using "FECHA" returning jfecha.
  56.  
  57.      display jfecha.
  58.          
  59.      invoke json "SizeOfArray" using "COBRANZA" returning indA.
  60.          
  61.      perform varying w--ii from zeros by 1 until w--ii = indA
  62.         move spaces      to dato
  63.         string "COBRANZA["    delimited by size
  64.                   w--ii       delimited by size
  65.                   "]"         delimited by size
  66.                   "."         delimited by size
  67.                   "TIPO"      delimited by size              
  68.                   into dato
  69.         end-string
  70.         invoke Json "StringOf" using dato  returning wtipo
  71.  
  72.         move spaces      to dato
  73.         string "COBRANZA["    delimited by size
  74.                   w--ii       delimited by size
  75.                   "]"         delimited by size
  76.                   "."         delimited by size
  77.                   "PERIODO"   delimited by size              
  78.                   into dato
  79.         end-string
  80.         invoke Json "StringOf" using dato  returning wperiodo
  81.      
  82.         move spaces      to dato
  83.         string "COBRANZA["    delimited by size
  84.                   w--ii       delimited by size
  85.                   "]"         delimited by size
  86.                   "."         delimited by size
  87.                   "IMPORTE"   delimited by size              
  88.                   into dato
  89.         end-string
  90.         invoke Json "StringOf" using dato  returning wimporte
  91.         move wimporte    to l-importe
  92.        
  93.         display wtipo, "   ", wperiodo, "   ", l-importe
  94.      
  95.      end-perform.
  96.      
  97.      exit program.

El problema que tengo es que no me "detecta" el punto decimal. El campo l-importe me muestra en el primer elemento del array 5000 (está bien porque no tiene punto) pero en el segundo elemento me muestra 100002,00 como que todo es entero.

El campo wimporte que uso para tomar el dato, además de poner el pic como está en ese ejemplo, probé

Código COBOL:
  1.      02 wimporte            pic S9(9) COMP-5.
  2.  
  3.      02 wimporte            COMP-2.
  4.  
  5.      02 wimporte            pic S9(10)V9(4) COMP-5.

Con ninguna de esas opciones logré que funcionara.

Alguna idea al respecto?.

Muchas gracias.

Saludos...

Fito...
Fito is offline   Responder Con Cita