ABAP转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

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 ).


关键词: ABAP

网友评论

发表评论