Difference between revisions of "SAP ABAP JSON"
From SapWiki
| (6 intermediate revisions by the same user not shown) | |||
| Line 142: | Line 142: | ||
{"$schema":"sss","@odata.context":"odata","VeeeeryyyyyLooooongJSONAttrbuuuuuuuuuteeeeeeeeeee":"ssssname","STANDARD":"stan"}</nowiki> | {"$schema":"sss","@odata.context":"odata","VeeeeryyyyyLooooongJSONAttrbuuuuuuuuuteeeeeeeeeee":"ssssname","STANDARD":"stan"}</nowiki> | ||
| + | EJEMPLO | ||
| + | <nowiki> | ||
| + | DATA lt_mapping TYPE /ui2/cl_json=>name_mappings. | ||
| + | |||
| + | lt_mapping = VALUE #( ( abap = `FOLDERPATH` json = `folderpath` ) | ||
| + | ( abap = `FILENAME` json = `filename` ) | ||
| + | ( abap = `BASE64FILE` json = `base64file` ) | ||
| + | ( abap = `IDTIPODOCUMENTO` json = `idTipoDocumento` ) | ||
| + | ( abap = `METADATA` json = `metadata` ) | ||
| + | ( abap = `OVERWRITE` json = `overwrite` ) | ||
| + | ( abap = `CREATOR` json = `Creator` ) | ||
| + | ( abap = `DESCRIPTION` json = `Description` ) | ||
| + | ( abap = `ABSTRACT` json = `Abstract` ) | ||
| + | ( abap = `FUNCIONARIO` json = `Funcionario` ) | ||
| + | ( abap = `MES` json = `Mes` ) | ||
| + | ( abap = `AÑO` json = `Año` ) | ||
| + | ). | ||
| + | ev_json_string = /ui2/cl_json=>serialize( data = is_createdocument " Data to serialize | ||
| + | pretty_name = /ui2/cl_json=>pretty_mode-low_case | ||
| + | name_mappings = lt_mapping ).</nowiki> | ||
* Clase CL_FDT_JSON | * Clase CL_FDT_JSON | ||
| Line 378: | Line 398: | ||
REPLACE ALL OCCURRENCES OF '\/' IN c_string WITH '/'. | REPLACE ALL OCCURRENCES OF '\/' IN c_string WITH '/'. | ||
REPLACE ALL OCCURRENCES OF '\\' IN c_string WITH '\'.</nowiki> | REPLACE ALL OCCURRENCES OF '\\' IN c_string WITH '\'.</nowiki> | ||
| + | |||
| + | ==USO DE TIPO BOOL== | ||
| + | Para tipos bool (true,false) usar tipo BOOLE_D en estructura ABAP, ejemplo | ||
| + | overwrite TYPE BOOLE_D, | ||
| + | |||
| + | en la serialización con /ui2/cl_json=>serialize la salida será del tipo: | ||
| + | "overwrite":false | ||
| + | "overwrite":true | ||
| + | |||
| + | ==leer tags dinámicamente== | ||
| + | Por ejemplo si tenemos el siguiente JSON | ||
| + | <nowiki> | ||
| + | { | ||
| + | "Code": 0, | ||
| + | "Message": "OK", | ||
| + | "Document": { | ||
| + | "IdDocumento": 282476, | ||
| + | "IdTipoDocumento": 437, | ||
| + | "Titulo": "pablo.pdf", | ||
| + | "Url": "http://www.misitio.com/sites/SAP/teletrabajo/DESA/pablo.pdf", | ||
| + | "Guid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", | ||
| + | "IdArchivo": null, | ||
| + | "IdPfe": null, | ||
| + | "HashCode": "P7R77Vy9N6JOXXXXXXXXXX==", | ||
| + | "Archivo": null, | ||
| + | "Metadata": { | ||
| + | "Format": { | ||
| + | "Mimetype": "application/pdf" | ||
| + | }, | ||
| + | "Identifier": { | ||
| + | "Uri": "http://www.misitio.com/sites/SAP/teletrabajo/DESA/pablo.pdf", | ||
| + | "Corfo": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", | ||
| + | "OriginalHash": "P7R77Vy9N6JOXXXXXXXXXX==", | ||
| + | "Region": "RM" | ||
| + | }, | ||
| + | "Date": { | ||
| + | "Created": "2025-10-14 16:29:45" | ||
| + | }, | ||
| + | "Creator": "Ingreso%20de%20Actas", | ||
| + | "Type": "ANTECEDENTE TELETRABAJO", | ||
| + | "Title": "pablo.pdf" | ||
| + | }, | ||
| + | "Migrado": false | ||
| + | } | ||
| + | }</nowiki> | ||
| + | |||
| + | y queremos leer IdDocumento Url Guid, tenemos: | ||
| + | |||
| + | <nowiki> | ||
| + | FORM get_json_data USING iv_response_json TYPE string | ||
| + | CHANGING ev_iddocumento TYPE i | ||
| + | ev_url TYPE string | ||
| + | ev_guid TYPE string. | ||
| + | |||
| + | DATA: lr_data TYPE REF TO data. | ||
| + | DATA: lo_data TYPE REF TO /ui2/cl_data_access. | ||
| + | DATA: lv_guid TYPE string, | ||
| + | lv_iddocumento TYPE i, | ||
| + | lv_url TYPE string. | ||
| + | |||
| + | DATA: lr_sdescr TYPE REF TO cl_abap_structdescr. | ||
| + | |||
| + | lr_data = /ui2/cl_json=>generate( json = iv_response_json | ||
| + | pretty_name = /ui2/cl_json=>pretty_mode-low_case ). | ||
| + | CHECK lr_data IS BOUND. | ||
| + | |||
| + | lo_data = /ui2/cl_data_access=>create( ir_data = lr_data iv_component = 'Document-Guid' ). | ||
| + | lo_data->value( IMPORTING ev_data = ev_guid ). | ||
| + | |||
| + | lo_data = /ui2/cl_data_access=>create( ir_data = lr_data iv_component = 'Document-IdDocumento' ). | ||
| + | lo_data->value( IMPORTING ev_data = ev_iddocumento ). | ||
| + | |||
| + | lo_data = /ui2/cl_data_access=>create( ir_data = lr_data iv_component = 'Document-Url' ). | ||
| + | lo_data->value( IMPORTING ev_data = ev_url ). | ||
| + | |||
| + | ENDFORM.</nowiki> | ||
[[Category:ABAP]] | [[Category:ABAP]] | ||
Latest revision as of 21:06, 15 October 2025
Contents
Ejemplo XSLT JSON
Uso en programas ABAP (XSLT)
FORM crear_json USING p_guia TYPE zhr01_dgtl
p_uname
CHANGING p_string_json TYPE string.
DATA: json_writer TYPE REF TO cl_sxml_string_writer.
DATA json TYPE xstring.
DATA lt_guia TYPE TABLE OF zhr01_dgtl.
APPEND p_guia TO lt_guia.
json_writer = cl_sxml_string_writer=>create(
type = if_sxml=>co_xt_json ).
CALL TRANSFORMATION zhcm_guia_dgtl
SOURCE root = lt_guia
usuario = p_uname
RESULT XML json_writer. "se usa el ejemplo 2 de Ejemplos
json = json_writer->get_output( ).
PERFORM decode USING json
CHANGING p_string_json.
ENDFORM. " CREAR_JSON
FORM decode USING p_xstring
CHANGING p_string.
CALL METHOD cl_http_utility=>if_http_utility~decode_utf8
EXPORTING
encoded = p_xstring
RECEIVING
unencoded = p_string.
ENDFORM. "decode
Ejemplo Serializing JSON
*&---------------------------------------------------------------------*
*& Report YTEST_JSON3
*&---------------------------------------------------------------------*
*& ejemplo Serializing JSON
*&---------------------------------------------------------------------*
REPORT ytest_json3 LINE-SIZE 260.
DATA l_string TYPE string.
TYPES: BEGIN OF ty_t001,
bukrs TYPE t001-bukrs,
butxt TYPE t001-butxt,
ort01 TYPE t001-ort01,
land1 TYPE t001-land1,
waers TYPE t001-waers,
spras TYPE t001-spras,
END OF ty_t001.
DATA lt_data TYPE TABLE OF ty_t001.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_data FROM t001 UP TO 2 ROWS
where land1 = 'DE'.
CALL METHOD /ui2/cl_json=>serialize
EXPORTING
data = lt_data " Data to serialize
RECEIVING
r_json = l_string. " JSON string
WRITE:/ l_string.
CALL METHOD /ui2/cl_json=>serialize
EXPORTING
data = lt_data " Data to serialize
pretty_name = /ui2/cl_json=>pretty_mode-low_case "camel_case
RECEIVING
r_json = l_string. " JSON string
WRITE:/ l_string.
CALL METHOD /ui2/cl_json=>serialize
EXPORTING
data = lt_data " Data to serialize
pretty_name = /ui2/cl_json=>pretty_mode-low_case "camel_case
name = 'SOCIEDADES'
RECEIVING
r_json = l_string. " JSON string
WRITE:/ l_string.
TYPES: BEGIN OF ty_data,
nombre TYPE string,
edad TYPE i,
nacimiento TYPE d,
direccion TYPE string,
plata(10) TYPE p DECIMALS 0,
END OF ty_data.
DATA wa TYPE ty_data.
wa-nombre = 'Deadpool'.
wa-edad = 1000.
wa-nacimiento = '19720915'.
wa-direccion = 'USA'.
wa-plata = 999999.
CALL METHOD /ui2/cl_json=>serialize
EXPORTING
data = wa " Data to serialize
RECEIVING
r_json = l_string. " JSON string
WRITE:/ l_string.
*####################################################################
TYPES:
BEGIN OF tp_s_data,
sschema TYPE string,
odatacontext TYPE string,
shortened_abap_name TYPE string,
standard TYPE string,
END OF tp_s_data.
DATA: ls_exp TYPE tp_s_data,
lt_mapping TYPE /ui2/cl_json=>name_mappings,
lv_json TYPE /ui2/cl_json=>json.
lt_mapping = VALUE #( ( abap = `SSCHEMA` json = `$schema` )
( abap = `ODATACONTEXT` json = `@odata.context` )
( abap = `SHORTENED_ABAP_NAME` json = `VeeeeryyyyyLooooongJSONAttrbuuuuuuuuuteeeeeeeeeee` ) ).
ls_exp-sschema = 'sss'.
ls_exp-odatacontext = 'odata'.
ls_exp-shortened_abap_name = 'ssssname'.
ls_exp-standard = 'stan'.
lv_json = /ui2/cl_json=>serialize( data = ls_exp name_mappings = lt_mapping ).
WRITE:/ lv_json.
- Salida Reporte
[{"BUKRS":"0001","BUTXT":"SAP A.G.","ORT01":"Walldorf","LAND1":"DE","WAERS":"EUR","SPRAS":"D"},{"BUKRS":"COPY","BUTXT":"Copy from CC.0001","ORT01":"(Only G/L accounts B-seg)","LAND1":"DE","WAERS":"EUR","SPRAS":"D"}]
[{"bukrs":"0001","butxt":"SAP A.G.","ort01":"Walldorf","land1":"DE","waers":"EUR","spras":"D"},{"bukrs":"COPY","butxt":"Copy from CC.0001","ort01":"(Only G/L accounts B-seg)","land1":"DE","waers":"EUR","spras":"D"}]
"SOCIEDADES":[{"bukrs":"0001","butxt":"SAP A.G.","ort01":"Walldorf","land1":"DE","waers":"EUR","spras":"D"},{"bukrs":"COPY","butxt":"Copy from CC.0001","ort01":"(Only G/L accounts B-seg)","land1":"DE","waers":"EUR","spras":"D"}]
{"NOMBRE":"Deadpool","EDAD":1000,"NACIMIENTO":"1972-09-15","DIRECCION":"USA","PLATA":999999}
{"$schema":"sss","@odata.context":"odata","VeeeeryyyyyLooooongJSONAttrbuuuuuuuuuteeeeeeeeeee":"ssssname","STANDARD":"stan"}
EJEMPLO
DATA lt_mapping TYPE /ui2/cl_json=>name_mappings.
lt_mapping = VALUE #( ( abap = `FOLDERPATH` json = `folderpath` )
( abap = `FILENAME` json = `filename` )
( abap = `BASE64FILE` json = `base64file` )
( abap = `IDTIPODOCUMENTO` json = `idTipoDocumento` )
( abap = `METADATA` json = `metadata` )
( abap = `OVERWRITE` json = `overwrite` )
( abap = `CREATOR` json = `Creator` )
( abap = `DESCRIPTION` json = `Description` )
( abap = `ABSTRACT` json = `Abstract` )
( abap = `FUNCIONARIO` json = `Funcionario` )
( abap = `MES` json = `Mes` )
( abap = `AÑO` json = `Año` )
).
ev_json_string = /ui2/cl_json=>serialize( data = is_createdocument " Data to serialize
pretty_name = /ui2/cl_json=>pretty_mode-low_case
name_mappings = lt_mapping ).
- Clase CL_FDT_JSON
CALL METHOD cl_fdt_json=>json_to_data
EXPORTING
iv_json = l_response
CHANGING
ca_data = ls_result.
Ejemplo de programa que genera archivo XSLT JSON, útil para Json con muchos campos
*&---------------------------------------------------------------------*
*& Report YJSON
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT yjson.
TYPES: BEGIN OF ty_fields,
fieldname TYPE string,
END OF ty_fields.
DATA lt_fields TYPE TABLE OF ty_fields.
DATA ls_fields TYPE ty_fields.
DATA l_string TYPE string.
DEFINE m_append.
CLEAR ls_fields.
ls_fields-fieldname = &1.
APPEND ls_fields TO lt_fields.
END-OF-DEFINITION.
START-OF-SELECTION.
m_append 'nombre'.
m_append 'apellido'.
m_append 'uvpAsignacionTraslacion'.
m_append 'mesUvpAsignacionTraslacion'.
m_append 'anoUvpAsignacionTraslacion'.
m_append 'uvpAsignMovilizacionEjec'.
m_append 'mesUvpAsignMovilizacionEjec'.
m_append 'anoUvpAsignMovilizacionEjec'.
m_append 'sueldoBaseMensual'.
m_append 'mesSueldoBaseMensual'.
m_append 'anoSueldoBaseMensual'.
m_append 'posicion'.
m_append 'proporcionalGratificacion'.
m_append 'mesProporcionalGratificacion'.
m_append 'anoProporcionalGratificacion'.
m_append 'anoPagoGratificacion'.
m_append 'proporcionalAnticipoGratificacion'.
m_append 'mesProporcionalAnticipoGratificacion'.
m_append 'anoProporcionalAnticipoGratificacion'.
m_append 'anoPagoAnticipoGratificacion'.
m_append 'proporcionalProvBonoBagEjec'.
m_append 'mesProporcionalProvBonoBagEjec'.
m_append 'anoProporcionalProvBonoBagEjec'.
m_append 'anoPagoProvBonoBagEjec'.
m_append 'uvpAsigTransporte'.
m_append 'mesUvpAsigTransporte'.
m_append 'anoUvpAsigTransporte'.
m_append 'uvpAsigAlimentacion'.
m_append 'mesUvpAsigAlimentacion'.
m_append 'anoUvpAsigAlimentacion'.
m_append 'saldoPendienteVacacionesLegales'.
m_append 'saldoPendienteVacacionesContract'.
m_append 'saldoPendienteVacacionesProgresivas'.
m_append 'uvpAporteGestionDesempeno'.
m_append 'mesUvpAporteGestionDesempeno'.
m_append 'anoUvpAporteGestionDesempeno'.
m_append 'antiguedad'.
m_append 'uvpBecaExcelenciaTrabajado'.
m_append 'mesUvpBecaExcelenciaTrabajado'.
m_append 'anoUvpBecaExcelenciaTrabajado'.
m_append 'uvpBecaEscPreEscolar'.
m_append 'mesUvpBecaEscPreEscolar'.
m_append 'anoUvpBecaEscPreEscolar'.
m_append 'uvpBecaBasicaMedia'.
m_append 'mesUvpBecaBasicaMedia'.
m_append 'anoUvpBecaBasicaMedia'.
m_append 'uvpBecaSuperior'.
m_append 'mesUvpBecaSuperior'.
m_append 'anoUvpBecaSuperior'.
m_append 'uvpBecaExcelenciaBenefic'.
m_append 'mesUvpBecaExcelenciaBenefic'.
m_append 'anoUvpBecaExcelenciaBenefic'.
m_append 'totalSubsidiadoFecha'.
m_append 'mesTotalSubsidiadoFecha'.
m_append 'anoTotalSubsidiadoFecha'.
m_append 'totalSubsidiadoFechaDSB'.
m_append 'mesTotalSubsidiadoFechaDSB'.
m_append 'anoTotalSubsidiadoFechaDSB'.
m_append 'asignacionFaenaCordillera'.
m_append 'mesAsignacionFaenaCordillera'.
m_append 'anoAsignacionFaenaCordillera'.
m_append 'proporcionalBonoVacacionesSPS'.
m_append 'mesProporcionalBonoVacacionesSPS'.
m_append 'anoProporcionalBonoVacacionesSPS'.
m_append 'proporcionalAnticipoBonoVacacionesSPS'.
m_append 'mesProporcionalAnticipoBonoVacacionesSPS'.
m_append 'anoProporcionalAnticipoBonoVacacionesSPS'.
m_append 'uvpAsignacionBonoVacaSPS'.
m_append 'mesUvpAsignacionBonoVacaSPS'.
m_append 'anoUvpAsignacionBonoVacaSPS'.
m_append 'uvpAguinaldoFiestasPatrias'.
m_append 'mesUvpAguinaldoFiestasPatrias'.
m_append 'anoUvpAguinaldoFiestasPatrias'.
m_append 'uvpAguinaldoNavidad'.
m_append 'mesUvpAguinaldoNavidad'.
m_append 'anoUvpAguinaldoNavidad'.
m_append 'proporcionalAnticipoBonoFlexible'.
m_append 'mesProporcionalAnticipoBonoFlexible'.
m_append 'anoProporcionalAnticipoBonoFlexible'.
m_append 'anoPagoAnticipoBonoFlexible'.
m_append 'uvpAsignMovilizacion'.
m_append 'mesUvpAsignMovilizacion'.
m_append 'anoUvpAsignMovilizacion'.
m_append 'uvpAsignAlimentacion'.
m_append 'mesUvpAsignAlimentacion'.
m_append 'anoUvpAsignAlimentacion'.
m_append 'uvpAsignColacion'.
m_append 'mesUvpAsignColacion'.
m_append 'anoUvpAsignColacion'.
m_append 'uvpAsignacionTurnoNoche'.
m_append 'mesUvpAsignacionTurnoNoche'.
m_append 'anoUvpAsignacionTurnoNoche'.
m_append 'anoPagoAporteGestionDesempeno'.
m_append 'uvpIncTrimGestionNegocio'.
m_append 'mesUvpIncTrimGestionNegocio'.
m_append 'anoUvpIncTrimGestionNegocio'.
m_append 'uvpIncentivosGestionMensual'.
m_append 'mesUvpIncentivosGestionMensual'.
m_append 'anoUvpIncentivosGestionMensual'.
m_append 'uvpAsignRiesgoCambioTurno'.
m_append 'mesUvpAsignRiesgoCambioTurno'.
m_append 'anoUvpAsignRiesgoCambioTurno'.
m_append 'uvpAsigTempRespEjec'.
m_append 'mesUvpAsigTempRespEjec'.
m_append 'anoUvpAsigTempRespEjec'.
m_append 'uvpAsignacionAcademicaSPS'.
m_append 'mesUvpAsignacionAcademicaSPS'.
m_append 'anoUvpAsignacionAcademicaSPS'.
m_append 'uvpBonoCompBenSalaCuna'.
m_append 'mesUvpBonoCompBenSalaCuna'.
m_append 'anoUvpBonoCompBenSalaCuna'.
m_append 'uvpAsignacionUtilesSPS'.
m_append 'mesUvpAsignacionUtilesSPS'.
m_append 'anoUvpAsignacionUtilesSPS'.
m_append 'uvpAsignacionCapacitacion'.
m_append 'mesUvpAsignacionCapacitacion'.
m_append 'anoUvpAsignacionCapacitacion'.
m_append 'uvpAsignacionDiasFestivos'.
m_append 'mesUvpAsignacionDiasFestivos'.
m_append 'anoUvpAsignacionDiasFestivos'.
m_append 'permisoAdministratSPS'.
m_append 'uvpAsignacionFallecimiento'.
m_append 'mesUvpAsignacionFallecimiento'.
m_append 'anoUvpAsignacionFallecimiento'.
m_append 'asignacionMaternidad'.
m_append 'mesAsignacionMaternidad'.
m_append 'anoAsignacionMaternidad'.
m_append 'uvpDepConvenidoMensual'.
m_append 'mesUvpDepConvenidoMensual'.
m_append 'anoUvpDepConvenidoMensual'.
m_append 'uvpAsignControlMedicoOcup'.
m_append 'mesUvpAsignControlMedicoOcup'.
m_append 'anoUvpAsignControlMedicoOcup'.
m_append 'uvpBecaConyuge'.
m_append 'mesUvpBecaConyuge'.
m_append 'anoUvpBecaConyuge'.
data(l_e) = CL_ABAP_CHAR_UTILITIES=>CR_LF.
LOOP AT lt_fields INTO ls_fields.
l_string = |<object>{ l_e }<str name="{ ls_fields-fieldname }">{ l_e }<tt:value ref="$ref.{ ls_fields-fieldname }"/>{ l_e }</str>{ l_e }</object>{ l_e }|.
IF sy-tabix = 1.
DATA(l_string_json) = l_string.
ELSE.
CONCATENATE l_string_json l_string INTO l_string_json.
ENDIF.
ENDLOOP.
BREAK-POINT.
- salida
<object> <str name="nombre"> <tt:value ref="$ref.nombre"/> </str> </object> <nowiki><object> <str name="apellido"> <tt:value ref="$ref.apellido"/> </str> </object> <object> <str name="uvpAsignacionTraslacion"> <tt:value ref="$ref.uvpAsignacionTraslacion"/> </str> </object> <object> <str name="mesUvpAsignacionTraslacion"> <tt:value ref="$ref.mesUvpAsignacionTraslacion"/> </str> </object> ... ... ... <object> <str name="anoUvpBecaConyuge"> <tt:value ref="$ref.anoUvpBecaConyuge"/> </str> </object>
Caracteres especiales
" Escape special characters REPLACE ALL OCCURRENCES OF '\' IN c_string WITH '\\'. REPLACE ALL OCCURRENCES OF '/' IN c_string WITH '\/'. REPLACE ALL OCCURRENCES OF '"' IN c_string WITH '\"'. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf(1) IN c_string WITH '\r'. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN c_string WITH '\n'. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN c_string WITH '\t'. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>form_feed IN c_string WITH '\f'. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>vertical_tab IN c_string WITH '\v'. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>backspace IN c_string WITH '\b'. " replace escape characters REPLACE ALL OCCURRENCES OF '\n' IN c_string WITH cl_abap_char_utilities=>newline. REPLACE ALL OCCURRENCES OF '\t' IN c_string WITH cl_abap_char_utilities=>horizontal_tab. REPLACE ALL OCCURRENCES OF '\f' IN c_string WITH cl_abap_char_utilities=>form_feed. REPLACE ALL OCCURRENCES OF '\v' IN c_string WITH cl_abap_char_utilities=>vertical_tab. REPLACE ALL OCCURRENCES OF '\b' IN c_string WITH cl_abap_char_utilities=>backspace. REPLACE ALL OCCURRENCES OF '\r' IN c_string WITH cl_abap_char_utilities=>cr_lf(1). REPLACE ALL OCCURRENCES OF '\"' IN c_string WITH '"'. REPLACE ALL OCCURRENCES OF '\/' IN c_string WITH '/'. REPLACE ALL OCCURRENCES OF '\\' IN c_string WITH '\'.
USO DE TIPO BOOL
Para tipos bool (true,false) usar tipo BOOLE_D en estructura ABAP, ejemplo
overwrite TYPE BOOLE_D,
en la serialización con /ui2/cl_json=>serialize la salida será del tipo:
"overwrite":false "overwrite":true
leer tags dinámicamente
Por ejemplo si tenemos el siguiente JSON
{
"Code": 0,
"Message": "OK",
"Document": {
"IdDocumento": 282476,
"IdTipoDocumento": 437,
"Titulo": "pablo.pdf",
"Url": "http://www.misitio.com/sites/SAP/teletrabajo/DESA/pablo.pdf",
"Guid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"IdArchivo": null,
"IdPfe": null,
"HashCode": "P7R77Vy9N6JOXXXXXXXXXX==",
"Archivo": null,
"Metadata": {
"Format": {
"Mimetype": "application/pdf"
},
"Identifier": {
"Uri": "http://www.misitio.com/sites/SAP/teletrabajo/DESA/pablo.pdf",
"Corfo": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"OriginalHash": "P7R77Vy9N6JOXXXXXXXXXX==",
"Region": "RM"
},
"Date": {
"Created": "2025-10-14 16:29:45"
},
"Creator": "Ingreso%20de%20Actas",
"Type": "ANTECEDENTE TELETRABAJO",
"Title": "pablo.pdf"
},
"Migrado": false
}
}
y queremos leer IdDocumento Url Guid, tenemos:
FORM get_json_data USING iv_response_json TYPE string
CHANGING ev_iddocumento TYPE i
ev_url TYPE string
ev_guid TYPE string.
DATA: lr_data TYPE REF TO data.
DATA: lo_data TYPE REF TO /ui2/cl_data_access.
DATA: lv_guid TYPE string,
lv_iddocumento TYPE i,
lv_url TYPE string.
DATA: lr_sdescr TYPE REF TO cl_abap_structdescr.
lr_data = /ui2/cl_json=>generate( json = iv_response_json
pretty_name = /ui2/cl_json=>pretty_mode-low_case ).
CHECK lr_data IS BOUND.
lo_data = /ui2/cl_data_access=>create( ir_data = lr_data iv_component = 'Document-Guid' ).
lo_data->value( IMPORTING ev_data = ev_guid ).
lo_data = /ui2/cl_data_access=>create( ir_data = lr_data iv_component = 'Document-IdDocumento' ).
lo_data->value( IMPORTING ev_data = ev_iddocumento ).
lo_data = /ui2/cl_data_access=>create( ir_data = lr_data iv_component = 'Document-Url' ).
lo_data->value( IMPORTING ev_data = ev_url ).
ENDFORM.