"---------------------------------------------------------- TYPES: BEGIN OF ty_name_mapping, abap TYPE abap_compname, json TYPE string, END OF ty_name_mapping. TYPES:BEGIN OF ty_makt, matnr TYPE makt-matnr, _spras TYPE makt-spras, maktx TYPE makt-maktx, END OF ty_makt. DATA:gt_makt TYPE TABLE OF ty_makt, gs_makt TYPE ty_makt. DATA:ls_mappings TYPE ty_name_mapping, lt_mappings TYPE HASHED TABLE OF ty_name_mapping WITH UNIQUE KEY abap. DATA:lv_json TYPE string. "填充内表数据 SELECT matnr, spras, maktx FROM makt WHERE spras EQ @sy-langu INTO TABLE @gt_makt UP TO 3 ROWS. "获取表结构字段 *SELECT * tabname, * fieldname *FROM dd03l *INTO TABLE @DATA(lt_dd03l) *WHERE tabname = 'MAKT' * AND as4local = 'A'. *LOOP AT lt_dd03l INTO DATA(ls_dd03l). * CLEAR:ls_mappings. * ls_mappings-abap = ls_dd03l-fieldname. * ls_mappings-json = ls_dd03l-fieldname. * TRANSLATE ls_mappings-json TO LOWER CASE. * INSERT ls_mappings INTO TABLE lt_mappings. *ENDLOOP. "内表的字段为大写,转成JSON的键需要小写, *"在转换时配置字段映射 *"获取内表结构字段 *DATA(lo_table_basic) = CAST cl_abap_tabledescr( cl_abap_tabledescr=>describe_by_data( gt_makt ) ). *DATA(lo_struct_basic) = CAST cl_abap_structdescr( lo_table_basic->get_table_line_type( ) ). *DATA(lt_dd03l) = lo_struct_basic->get_components( ). * *"配置内表字段与JSON键的映射 *LOOP AT lt_dd03l INTO DATA(ls_dd03l). * CLEAR:ls_mappings. * ls_mappings-abap = ls_dd03l-name. * ls_mappings-json = ls_dd03l-name. * TRANSLATE ls_mappings-json TO LOWER CASE. * INSERT ls_mappings INTO TABLE lt_mappings. *ENDLOOP. DATA:lv_pre_name TYPE char1. *lv_pre_name = 'L'."JSON键为小写 lt_mappings = VALUE #( BASE lt_mappings ( abap = 'MATNR' json = 'matnr' ) ( abap = 'SPRAS' json = '_spras' ) ( abap = 'MAKTX' json = 'Maktx' ) ). "内表转JSON *lv_json = /ui2/cl_json=>serialize( data = gt_makt pretty_name = lv_pre_name name_mappings = lt_mappings ). lv_json = /ui2/cl_json=>serialize( data = gt_makt name_mappings = lt_mappings ). cl_demo_output=>display( lv_json ).
网友评论