【ABAP】内部テーブルをJSONに変換する


やること

ABAPで「内部テーブルからJSONへの変換」と「JSONから内部テーブルへの変換」を行う。
方法は「CALL TRANSFORMATION」と「/UI2/CL_JSON」の2パターン。

参考

パターンA:「CALL TRANSFORMATION」を使用

ソースコード

Y_TEST_JSON
  DATA lv_output_length TYPE i.
  DATA lt_binary_tab    TYPE STANDARD TABLE OF sdokcntbin.
  DATA lv_json          TYPE string.

  SELECT *
    FROM sflight
    INTO TABLE @DATA(lt_flightdata).

* (A-1)内部テーブルからJSONに変換
  DATA(lo_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
  CALL TRANSFORMATION id SOURCE text = lt_flightdata RESULT XML lo_writer.
  DATA(lv_jsonx) = lo_writer->get_output( ).

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = lv_jsonx
    IMPORTING
      output_length = lv_output_length
    TABLES
      binary_tab    = lt_binary_tab.

  CALL FUNCTION 'SCMS_BINARY_TO_STRING'
    EXPORTING
      input_length  = lv_output_length
    IMPORTING
      text_buffer   = lv_json
      output_length = lv_output_length
    TABLES
      binary_tab    = lt_binary_tab.
  cl_demo_output=>display_json( lv_json ).

* (A-2)JSONから内部テーブルに変換
  CLEAR lt_flightdata.
  CALL TRANSFORMATION id SOURCE XML lv_jsonx RESULT text = lt_flightdata.
  cl_demo_output=>display( lt_flightdata ).

実行結果

(A-1)内部テーブルからJSONへの変換

cl_demo_outputの出力結果は以下

(A-2)JSONから内部テーブルへの変換

cl_demo_outputの出力結果は以下

パターンB:/UI2/CL_JSONを使用

ソースコード

Y_TEST_JSON
  SELECT *
    FROM sflight
    INTO TABLE @DATA(lt_flightdata).

* (B-1)内部テーブルからJSONに変換
  DATA(lv_json) = /ui2/cl_json=>serialize( lt_flightdata ).
  cl_demo_output=>display_json( lv_json ).

* (B-2)JSONから内部テーブルに変換
  CLEAR lt_flightdata.
  /ui2/cl_json=>deserialize( EXPORTING json = lv_json CHANGING data = lt_flightdata ).
  cl_demo_output=>display( lt_flightdata ).

実行結果

(B-1)内部テーブルからJSONへの変換

cl_demo_outputの出力結果は以下

(B-2)JSONから内部テーブルへの変換

cl_demo_outputの出力結果は以下