Difference between revisions of "SAP ABAP JSON"
From SapWiki
(15 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 (XSLT)== | ||
+ | <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. | ||
+ | |||
+ | CALL METHOD cl_http_utility=>if_http_utility~decode_utf8 | ||
+ | EXPORTING | ||
+ | encoded = p_xstring | ||
+ | RECEIVING | ||
+ | unencoded = p_string. | ||
+ | ENDFORM. "decode</nowiki> | ||
+ | |||
+ | ==Ejemplo Serializing JSON== | ||
+ | <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 | ||
+ | <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== | ||
+ | <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 | ||
+ | <nowiki><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></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]] |
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 '\'.