#やること
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 ).