Buenos días. Estoy desarrollando un REPORT ABAP que consulta a una API. De esa API recibo un JSON pero en string, por ello estoy intentando parsearlo a una estructura de datos. Pero me estoy encontrando un problema, ya que si referencia una estructura dentro de otra, la funcion “deserialize” no me guarda los datos.
Este es el JSON que recibo pero en STRING de la API (las respuestas son completas pero he eliminado algunos datos):
Y esta es la estructura de datos que utilizo para intentar almacenar el JSON:
TYPES: BEGIN OF ty_links,
ios TYPE string,
iosQRCode TYPE string,
android TYPE string,
androidQRCode TYPE string,
web TYPE string,
webQRCode TYPE string,
END OF ty_links.
TYPES: BEGIN OF ty_recipient,
recipientId TYPE string,
orderIndex TYPE i,
status TYPE string,
email TYPE string,
name TYPE string,
type TYPE string,
links TYPE TY_LINKS,
END OF ty_recipient.
TYPES: BEGIN OF lty_response,
signatureprocessid TYPE string,
status TYPE string,
createdDate TYPE string,
lastUpdatedDate TYPE string,
expirationDate TYPE string,
recipients TYPE ty_recipient,
statusMessage TYPE string,
END OF lty_response.
Entonces al debugear el codigo podemos ver que guarda los datos de lty_response pero no los de ty_recipient:
En mi opinion, creo que tengo la ESTRUCTURA DE DATOS MAL ya que no gestiono el array recipients. Y por ello la funcion /ui2/cl_json=>deserialize no es capaz de “meter” esos datos.
Agradecería muchísimo si alguien podría echarme una mano con una posible solución. Estoy empezando en ABAP y me está resultando algo complicado.
Adjunto una parte de mi codigo con la funcion deserialize por si es necesario:
DATA: ls_response TYPE lty_response.
"Convert the data into required format( Usually deep structure with required fields ).
/ui2/cl_json=>deserialize(
EXPORTING
json = lv_response " JSON string
pretty_name = /ui2/cl_json=>pretty_mode-low_case " Pretty Print property names
CHANGING
data = ls_response " Data serialaized
).