
DATA:
lo_string_writer TYPE REF TO cl_sxml_string_writer.
DATA:
lv_data TYPE xstring,
lv_arr_textin TYPE string,
lv_arr_textot TYPE string,
lv_len TYPE i.
TRY.
"Create string writer for JSON
lo_string_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
"Call transformation
CALL TRANSFORMATION id SOURCE structure = im_s_data RESULT XML lo_string_writer.
lv_data = lo_string_writer->get_output( ).
FREE lo_string_writer.
"Create string writer for JSON
lo_string_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
"Call transformation
CALL TRANSFORMATION zjson_xml_to_diff_case
PARAMETERS mode = im_v_case
SOURCE XML lv_data
RESULT XML lo_string_writer.
"Get JSON in string format
rt_v_json = cl_abap_codepage=>convert_from( lo_string_writer->get_output( ) ).
lv_arr_textin = 'structure'.
zcl_json_utility=>convert_fname_case(
EXPORTING
im_v_fname = lv_arr_textin
im_v_case = |{ im_v_case }|
RECEIVING
rt_v_fname = lv_arr_textot
).
IF rt_v_json CS lv_arr_textot.
lv_arr_textot = `{"` && lv_arr_textot && '":'.
REPLACE FIRST OCCURRENCE OF lv_arr_textot IN rt_v_json WITH ''.
lv_len = strlen( rt_v_json ) - 1.
IF lv_len GT 0.
rt_v_json = rt_v_json+0(lv_len).
ENDIF.
ENDIF.
CATCH cx_root.
RAISE EXCEPTION TYPE zcx_json_conversion_error.
ENDTRY.
DATA:
lo_string_writer TYPE REF TO cl_sxml_string_writer.
DATA:
lv_data TYPE xstring,
lv_arr_textin TYPE string,
lv_arr_textot TYPE string,
lv_len TYPE i.
TRY.
"Create string writer for JSON
lo_string_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
"Call transformation
CALL TRANSFORMATION id SOURCE array = im_t_table RESULT XML lo_string_writer.
lv_data = lo_string_writer->get_output( ).
FREE lo_string_writer.
"Create string writer for JSON
lo_string_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
"Call transformation
CALL TRANSFORMATION zjson_xml_to_diff_case
PARAMETERS mode = im_v_case
SOURCE XML lv_data
RESULT XML lo_string_writer.
"Get JSON
rt_v_json = cl_abap_codepage=>convert_from( lo_string_writer->get_output( ) ).
lv_arr_textin = 'Array'.
zcl_json_utility=>convert_fname_case(
EXPORTING
im_v_fname = lv_arr_textin
im_v_case = |{ im_v_case }|
RECEIVING
rt_v_fname = lv_arr_textot
).
IF rt_v_json CS lv_arr_textot.
lv_arr_textot = `{"` && lv_arr_textot && '":'.
REPLACE FIRST OCCURRENCE OF lv_arr_textot IN rt_v_json WITH ''.
lv_len = strlen( rt_v_json ) - 1.
IF lv_len GT 0.
rt_v_json = rt_v_json+0(lv_len).
ENDIF.
ENDIF.
CATCH cx_root.
RAISE EXCEPTION TYPE zcx_json_conversion_error.
ENDTRY.
DATA:
lv_str TYPE string.
CLEAR rt_v_fname.
CHECK im_v_fname IS NOT INITIAL.
CASE im_v_case.
WHEN co_ftype_lowercase.
rt_v_fname = to_lower( im_v_fname ).
WHEN co_ftype_uppercase.
rt_v_fname = to_upper( im_v_fname ).
WHEN co_ftype_camelcase_upper.
lv_str = to_mixed( im_v_fname ).
rt_v_fname = to_upper( im_v_fname(1) ) && lv_str+1.
WHEN co_ftype_camelcase.
lv_str = to_mixed( im_v_fname ).
rt_v_fname = to_lower( im_v_fname(1) ) && lv_str+1.
ENDCASE.
REPLACE all OCCURRENCES OF '"' in rt_v_fname WITH ''.
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:f="FCT" exclude-result-prefixes="f" version="1.0">
<sap:external-function class="ZCL_JSON_UTILITY" kind="class" method="CONVERT_FNAME_CASE" name="f:toCC">
<sap:argument param="IM_V_FNAME" type="string"/>
<sap:argument param="IM_V_CASE" type="string"/>
<sap:result param="RT_V_FNAME" type="string"/>
</sap:external-function>
<xsl:param name="MODE"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="name">
<xsl:value-of select="f: toCC( string( . ), string( $MODE ) )"/>
</xsl:attribute>
</xsl:template>
</xsl:transform>
REPORT zabap_2_json.
DATA:
BEGIN OF ls_data,
material_no TYPE mara-matnr,
material_desc TYPE string,
END OF ls_data,
lt_data LIKE TABLE OF ls_data INITIAL SIZE 0.
DATA:
lv_text TYPE string.
TRY.
ls_data-material_no = '900'.
ls_data-material_desc = 'Material 1'.
cl_demo_output=>begin_section( `Structure to JSON(Camel case):`).
zcl_json_utility=>convert_stuct_to_json(
EXPORTING
im_s_data = ls_data
im_v_case = zcl_json_utility=>co_ftype_camelcase
RECEIVING
rt_v_json = lv_text
).
cl_demo_output=>write( data = lv_text ).
cl_demo_output=>end_section( ).
cl_demo_output=>begin_section( `Structure to JSON(Camel case upper):` ).
zcl_json_utility=>convert_stuct_to_json(
EXPORTING
im_s_data = ls_data
im_v_case = zcl_json_utility=>co_ftype_camelcase_upper
RECEIVING
rt_v_json = lv_text
).
cl_demo_output=>write( data = lv_text ).
cl_demo_output=>end_section( ).
cl_demo_output=>begin_section( `Structure to JSON(lower case):` ).
zcl_json_utility=>convert_stuct_to_json(
EXPORTING
im_s_data = ls_data
im_v_case = zcl_json_utility=>co_ftype_lowercase
RECEIVING
rt_v_json = lv_text
).
cl_demo_output=>write( data = lv_text ).
cl_demo_output=>end_section( ).
cl_demo_output=>begin_section( `Structure to JSON(upper case):` ).
zcl_json_utility=>convert_stuct_to_json(
EXPORTING
im_s_data = ls_data
im_v_case = zcl_json_utility=>co_ftype_uppercase
RECEIVING
rt_v_json = lv_text
).
cl_demo_output=>write( data = lv_text ).
cl_demo_output=>end_section( ).
ls_data-material_no = '900'.
ls_data-material_desc = 'Material 1'.
APPEND ls_data TO lt_data.
ls_data-material_no = '901'.
ls_data-material_desc = 'Material 2'.
APPEND ls_data TO lt_data.
cl_demo_output=>begin_section( `ITAB to JSON(camel case):` ).
zcl_json_utility=>convert_itab_to_json(
EXPORTING
im_t_table = lt_data
im_v_case = zcl_json_utility=>co_ftype_camelcase
RECEIVING
rt_v_json = lv_text
).
cl_demo_output=>write( data = lv_text ).
cl_demo_output=>end_section( ).
cl_demo_output=>display( ).
CATCH zcx_json_conversion_error. " Error during JSON Conversion
ENDTRY.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
10 | |
7 | |
6 | |
4 | |
3 | |
3 | |
3 | |
3 | |
3 | |
3 |