JSON内表

*&---------------------------------------------------------------------*
*& 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.

 

posted @ 2023-10-25 10:55  ABAP-武汉  阅读(58)  评论(0)    收藏  举报