天天看點

如何用CL_CLB_PARSE_JSON解析json字元串到動态生成的ABAP内表結構裡

*&---------------------------------------------------------------------*

*& Report  ZTESTDATA

*&

REPORT ZJSON_TWITTER.

data: lv_content type string,

     lv_number TYPE i,

     lr_json TYPE REF TO CL_CLB_PARSE_JSON,

     lxstring TYPE xstring,

     lv_converted TYPE string.

lv_content = zcl_jerry_tool=>GET_FILE_CONTENT_BY_PATH( '\\TSHomeServer\TSHome$\i042416\Desktop\12.txt' ).

lxstring   = cl_abap_codepage=>convert_to( lv_content ).

lv_converted = CL_CLB_TOOLS=>XSTRING_TO_STRING( lxstring ).

data: lv_id type string,

     lv_text type string,

     lv_string_table TYPE string_table,

     lr_data TYPE REF TO CL_ABAP_TYPEDESCR,

     lr_indices TYPE REF TO CL_ABAP_TABLEDESCR,

     lrs_user_mentions    TYPE REF TO cl_abap_structdescr,

     lrs_entities         TYPE REF TO cl_abap_structdescr,

     lrs_root             TYPE REF TO cl_abap_structdescr,

     lrt_user_mentions    TYPE REF TO cl_abap_tabledescr,

     ls_comp          TYPE abap_componentdescr,

     lt_components    TYPE abap_component_tab,

     lr_content          TYPE REF TO data.

FIELD-SYMBOLS: TYPE any.

lr_data = CL_ABAP_TYPEDESCR=>describe_by_data( lv_id ).

lr_indices ?= CL_ABAP_TYPEDESCR=>describe_by_data( lv_string_table ).

ls_comp-name = 'id'.

ls_comp-type ?= lr_data.

APPEND ls_comp TO lt_components.

ls_comp-name = 'id_str'.

ls_comp-name = 'indices'.

ls_comp-type ?= lr_indices.

ls_comp-name = 'name'.

ls_comp-name = 'screen_name'.

lrs_user_mentions  = cl_abap_structdescr=>create( lt_components ).

lrt_user_mentions      = cl_abap_tabledescr=>create( lrs_user_mentions ).

CLEAR: lt_components.

ls_comp-name = 'user_mentions'.

ls_comp-type ?= lrt_user_mentions.

lrs_entities = cl_abap_structdescr=>create( lt_components ).

ls_comp-name = 'created_at'.

ls_comp-name = 'entities'.

ls_comp-type ?= lrs_entities.

ls_comp-name = 'text'.

lrs_root = cl_abap_structdescr=>create( lt_components ).

CREATE DATA lr_content TYPE HANDLE lrs_root.

ASSIGN lr_content->* TO .

BREAK-POINT.

CREATE OBJECT lr_json.

CALL METHOD lr_json->JSON_TO_DATA

  EXPORTING

     IV_JSON = lv_converted

  CHANGING

     c_data = .