Hola amigos:
Tengo el siguiente ejemplo de un json que quiero decodificar.
Código COBOL:
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 wcobranza.
02 pic x(50) value '{'.
02 pic x(50) value ' "ALUMNO": "Chiavazza Adolfo Carlos",'.
02 pic x(50) value ' "DNI": "22222222",'.
02 pic x(50) value ' "FECHA": "10-03-2022",'.
02 pic x(50) value ' "COBRANZA": ['.
02 pic x(50) value ' {'.
02 pic x(50) value ' "TIPO": 1,'.
02 pic x(50) value ' "PERIODO": "03-2022",'.
02 pic x(50) value ' "IMPORTE": 5000'.
02 pic x(50) value ' },'.
02 pic x(50) value ' {'.
02 pic x(50) value ' "TIPO": 2,'.
02 pic x(50) value ' "PERIODO": "03-2022",'.
02 pic x(50) value ' "IMPORTE": 1000.02'.
02 pic x(50) value ' }'.
02 pic x(50) value ' ]'.
02 pic x(50) value '}'.
01 jfecha pic x(10).
01 redefines jfecha.
02 jfecha-dd pic 99.
02 pic x.
02 jfecha-mm pic 99.
02 pic x.
02 jfecha-aa pic 9999.
01 wfecha pic 9(8).
01 redefines wfecha.
02 wfecha-aa pic 9999.
02 wfecha-mm pic 99.
02 wfecha-dd pic 99.
01 indA pic s9(9) comp-5 value zeros.
01 w--ii pic 9(8).
01 dato pic x(200).
01 wdatos.
02 wtipo pic 999.
02 wperiodo pic x(7).
02 wimporte pic 9(9)v99.
02 l-importe pic z(9),zz.
PROCEDURE DIVISION.
comienzo.
invoke json "Clear".
invoke json "Load" using wcobranza.
invoke json "StringOf" using "FECHA" returning jfecha.
display jfecha.
invoke json "SizeOfArray" using "COBRANZA" returning indA.
perform varying w--ii from zeros by 1 until w--ii = indA
move spaces to dato
string "COBRANZA[" delimited by size
w--ii delimited by size
"]" delimited by size
"." delimited by size
"TIPO" delimited by size
into dato
end-string
invoke Json "StringOf" using dato returning wtipo
move spaces to dato
string "COBRANZA[" delimited by size
w--ii delimited by size
"]" delimited by size
"." delimited by size
"PERIODO" delimited by size
into dato
end-string
invoke Json "StringOf" using dato returning wperiodo
move spaces to dato
string "COBRANZA[" delimited by size
w--ii delimited by size
"]" delimited by size
"." delimited by size
"IMPORTE" delimited by size
into dato
end-string
invoke Json "StringOf" using dato returning wimporte
move wimporte to l-importe
display wtipo, " ", wperiodo, " ", l-importe
end-perform.
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:
02 wimporte pic S9(9) COMP-5.
02 wimporte COMP-2.
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...