使用/UI2/CL_JSON方式实现abap内表和json互转
*&---------------------------------------------------------------------*
*& Report ZYC_JSON_01
*&---------------------------------------------------------------------*
*& zyc 21.11.2022 10:56:53
*& DESCRIBE abap和json互转
*&---------------------------------------------------------------------*
REPORT ZYC_JSON_01.
DATA:lt_sflight LIKE TABLE OF sflight,
ls_sflight LIKE sflight,
lrf_descr TYPE REF TO cl_abap_typedescr,
lv_json TYPE string.
SELECT * FROM sflight INTO TABLE lt_sflight UP TO 3 ROWS.
*内表转JSON
lv_json = /UI2/CL_JSON=>serialize(
data = lt_sflight
compress = abap_true
pretty_name = /UI2/CL_JSON=>pretty_mode-camel_case
).
WRITE / lv_json.
*JSON转内表
/UI2/CL_JSON=>DESERIALIZE( EXPORTING JSON = lv_json
PRETTY_NAME = /UI2/CL_JSON=>PRETTY_MODE-CAMEL_CASE
CHANGING DATA = lt_sflight[] ).
LOOP AT lt_sflight INTO ls_sflight FROM 2.
WRITE : / ls_sflight-CARRID,ls_sflight-CONNID,ls_sflight-FLDATE.
ENDLOOP.
*动态获取表字段
DATA:DESCR_REF TYPE REF TO CL_ABAP_STRUCTDESCR.
FIELD-SYMBOLS:<FS_SFLIGHT> TYPE ABAP_COMPDESCR.
DESCR_REF ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( ls_sflight ).
LOOP AT DESCR_REF->COMPONENTS ASSIGNING <FS_SFLIGHT>.
WRITE: / <FS_SFLIGHT>-NAME.
ENDLOOP.
/UI2/CL_JSON=>deserialize(
EXPORTING
json = lv_json
pretty_name = /UI2/CL_JSON=>pretty_mode-camel_case
CHANGING
data = lt_sflight
).
lrf_descr = cl_abap_typedescr=>describe_by_data( lt_sflight ).
lv_json = /UI2/CL_JSON=>serialize( lrf_descr ).
WRITE / lv_json.