Difference between revisions of "SAP ABAP JSON"
From SapWiki
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==[[SAP_ABAP_JSON_XSLT|Ejemplo XSLT JSON]]== | ==[[SAP_ABAP_JSON_XSLT|Ejemplo XSLT JSON]]== | ||
− | ==Uso en programas ABAP== | + | ==Uso en programas ABAP (XSLT)== |
− | FORM crear_json | + | <nowiki>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. | CHANGING p_string. | ||
− | + | CALL METHOD cl_http_utility=>if_http_utility~decode_utf8 | |
− | + | EXPORTING | |
− | + | encoded = p_xstring | |
− | + | RECEIVING | |
− | + | unencoded = p_string. | |
− | + | ENDFORM. "decode</nowiki> | |
− | |||
==Ejemplo Serializing JSON== | ==Ejemplo Serializing JSON== | ||
− | <nowiki> *&---------------------------------------------------------------------* | + | <nowiki>*&---------------------------------------------------------------------* |
− | + | *& 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.</nowiki> | |
* Salida Reporte | * Salida Reporte | ||
− | <nowiki> [{"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"}] | + | <nowiki>[{"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"}</nowiki> | |
+ | |||
+ | * Clase CL_FDT_JSON | ||
+ | |||
+ | <nowiki> CALL METHOD cl_fdt_json=>json_to_data | ||
+ | EXPORTING | ||
+ | iv_json = l_response | ||
+ | CHANGING | ||
+ | ca_data = ls_result.</nowiki> | ||
==Ejemplo de programa que genera archivo XSLT JSON, útil para Json con muchos campos== | ==Ejemplo de programa que genera archivo XSLT JSON, útil para Json con muchos campos== | ||
− | <nowiki> *&---------------------------------------------------------------------* | + | <nowiki>*&---------------------------------------------------------------------* |
− | + | *& 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.</nowiki> | |
* salida | * salida | ||
Line 349: | Line 355: | ||
</str> | </str> | ||
</object></nowiki> | </object></nowiki> | ||
+ | |||
+ | ==Caracteres especiales== | ||
+ | <nowiki>" 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 '\'.</nowiki> | ||
[[Category:ABAP]] | [[Category:ABAP]] |
Latest revision as of 13:08, 14 October 2020
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"}
- 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 '\'.