*&---------------------------------------------------------------------*
*& Report ZDZ011
*& ABAP JSON 字段名映射 name_mappings 大写 小写 驼峰 纵深 /ui2/cl_json
*& https://answers.sap.com/questions/5319934/modify-hashed-table.html
*&---------------------------------------------------------------------*
REPORT zdz011 NO STANDARD PAGE HEADING.
TABLES: spfli.
TYPES:
BEGIN OF detail,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
fltype TYPE spfli-fltype,
period TYPE spfli-period,
END OF detail.
TYPES: details TYPE STANDARD TABLE OF detail WITH NON-UNIQUE KEY carrid connid.
TYPES: BEGIN OF jdata,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
cityto TYPE spfli-cityto,
airpto TYPE spfli-airpto,
fltime TYPE spfli-fltime,
deptime TYPE spfli-deptime,
arrtime TYPE spfli-arrtime,
distance TYPE spfli-distance,
distid TYPE spfli-distid,
value TYPE co2_string_tb,
details TYPE details,
END OF jdata.
DATA: lw_jdata TYPE jdata,
lt_jdata TYPE HASHED TABLE OF jdata WITH UNIQUE KEY carrid connid.
DATA: lw_details TYPE detail,
lt_details TYPE HASHED TABLE OF detail WITH UNIQUE KEY carrid connid.
TYPES: BEGIN OF name_mapping,
abap TYPE abap_compname,
json TYPE string,
END OF name_mapping.
DATA: lw_name_mapping TYPE name_mapping,
name_mappings TYPE HASHED TABLE OF name_mapping WITH UNIQUE KEY abap.
DATA: lv_compress TYPE char1,
lv_name TYPE string,
lv_pretty_name TYPE char1,
lo_type_descr TYPE REF TO cl_abap_typedescr,
lv_assoc_arrays TYPE char1,
lv_ts_as_iso8601 TYPE char1,
lv_expand_includes TYPE char1,
lv_assoc_arrays_opt TYPE char1,
lv_numc_as_string TYPE char1,
lt_name_mappings LIKE name_mappings,
lv_conversion_exits TYPE char1.
DATA: lv_jsonstr TYPE string,
lv_jsonxstr TYPE xstring.
TYPES:
BEGIN OF t_s_symbol,
header TYPE string,
name TYPE string,
type TYPE REF TO cl_abap_datadescr,
value TYPE REF TO data,
convexit_out TYPE string,
convexit_in TYPE string,
compressable TYPE abap_bool,
read_only TYPE abap_bool,
END OF t_s_symbol.
TYPES: t_t_symbol TYPE STANDARD TABLE OF t_s_symbol WITH DEFAULT KEY.
SELECTION-SCREEN BEGIN OF BLOCK b101 WITH FRAME TITLE TEXT-101.
SELECT-OPTIONS: s_carrid FOR spfli-carrid,
s_connid FOR spfli-connid.
SELECTION-SCREEN END OF BLOCK b101.
INITIALIZATION.
START-OF-SELECTION.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_jdata
FROM spfli
WHERE spfli~carrid IN s_carrid
AND spfli~connid IN s_connid.
SORT lt_jdata BY carrid connid.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_details
FROM spfli
WHERE spfli~carrid IN s_carrid
AND spfli~connid IN s_connid.
SORT lt_details BY carrid connid.
LOOP AT lt_jdata INTO lw_jdata.
lw_details-carrid = 'AZ'.
lw_details-connid = '0555'.
APPEND 'value1' TO lw_jdata-value.
APPEND 'Value2' TO lw_jdata-value.
APPEND lw_details TO lw_jdata-details.
MODIFY TABLE lt_jdata FROM lw_jdata.
ENDLOOP.
ULINE.
LOOP AT lt_jdata INTO lw_jdata.
WRITE:/ lw_jdata-cityto, lw_jdata-deptime, lw_jdata-distid, lw_jdata-fltime.
ENDLOOP.
lw_name_mapping-abap = 'CARRID'.
lw_name_mapping-json = 'Carrid'. "
INSERT lw_name_mapping INTO TABLE lt_name_mappings.
lw_name_mapping-abap = 'CITYTO'.
lw_name_mapping-json = 'CityTo'. "CityTo
INSERT lw_name_mapping INTO TABLE lt_name_mappings.
lw_name_mapping-abap = 'DEPTIME'.
lw_name_mapping-json = '__depTime'.
INSERT lw_name_mapping INTO TABLE lt_name_mappings.
lw_name_mapping-abap = 'DISTID'.
lw_name_mapping-json = 'dist ID'.
INSERT lw_name_mapping INTO TABLE lt_name_mappings.
lw_name_mapping-abap = 'FLTIME'.
lw_name_mapping-json = 'fltime时间'.
INSERT lw_name_mapping INTO TABLE lt_name_mappings.
CALL METHOD /ui2/cl_json=>serialize
EXPORTING
data = lt_jdata
compress = lv_compress
name = lv_name
pretty_name = lv_pretty_name
type_descr = lo_type_descr
assoc_arrays = lv_assoc_arrays
ts_as_iso8601 = lv_ts_as_iso8601
expand_includes = lv_expand_includes
assoc_arrays_opt = lv_assoc_arrays_opt
numc_as_string = lv_numc_as_string
name_mappings = lt_name_mappings
* conversion_exits = lv_conversion_exits
RECEIVING
r_json = lv_jsonstr.
ULINE.
WRITE:/ lv_jsonstr.
cl_demo_output=>new(
)->write_json( lv_jsonstr
)->display( ).
REFRESH: lt_jdata.
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = lv_jsonstr
jsonx = lv_jsonxstr
pretty_name = lv_pretty_name
assoc_arrays = lv_assoc_arrays
assoc_arrays_opt = lv_assoc_arrays_opt
name_mappings = lt_name_mappings
* conversion_exits = lv_conversion_exits
CHANGING
data = lt_jdata.
ULINE.
LOOP AT lt_jdata INTO lw_jdata.
WRITE:/ lw_jdata-cityto, lw_jdata-deptime, lw_jdata-distid, lw_jdata-fltime.
ENDLOOP.