ABAP 内表与JSON转换
一、内表转JSON
"-----------------------------@斌将军----------------------------- 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 INTO TABLE gt_makt WHERE spras = sy-langu. "获取表结构字段 *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键为小写 "内表转JSON lv_json = /ui2/cl_json=>serialize( data = gt_makt pretty_name = lv_pre_name name_mappings = lt_mappings ). WRITE:lv_json. "-----------------------------@斌将军-----------------------------
二、JSON转内表
"-----------------------------@斌将军----------------------------- "JSON转内表 REFRESH:gt_makt. /ui2/cl_json=>deserialize( EXPORTING json = lv_json pretty_name = /ui2/cl_json=>pretty_mode-camel_case CHANGING data = gt_makt ). "-----------------------------@斌将军-----------------------------
定期更文,欢迎关注