SAP Tutorials Blog


 


TYPES :

  BEGIN OF ty_student,

    name TYPE string,

    age  TYPE i,

    city TYPE string,

  END OF ty_student.


DATA : lv_json    TYPE string,

       lr_data    TYPE REF TO data,

       ls_student TYPE ty_student,

       lt_student TYPE STANDARD TABLE OF ty_student.


FIELD-SYMBOLS : <lfs_table> TYPE ANY TABLE.



"Prepare JSON string for testing


lv_json = '{"students": [{"name": "Amar","age": 18,"city": "Mumbai"},' &&

          '{"name": "Akbar","age": 17,"city": "Mumbai"},' &&

          '{"name": "Anthony","age": 16,"city": "Mumbai"} ] }'.


/ui2/cl_json=>deserialize(

  EXPORTING

    json         = lv_json

    pretty_name  = /ui2/cl_json=>pretty_mode-user

    assoc_arrays = abap_true

  CHANGING

    data         = lr_data ).


IF lr_data IS BOUND.


  ASSIGN lr_data->* TO FIELD-SYMBOL(<lfs_data>).

  ASSIGN COMPONENT 'STUDENTS' OF STRUCTURE <lfs_data> TO FIELD-SYMBOL(<lfs_results>).

  ASSIGN <lfs_results>->* TO <lfs_table>.


  LOOP AT <lfs_table> ASSIGNING FIELD-SYMBOL(<lfs_row>).


    DO 3 TIMES. "Number of fields


      CASE sy-index.

        WHEN 1. DATA(lv_fname) = 'NAME'.

        WHEN 2. lv_fname = 'AGE'.

        WHEN 3. lv_fname = 'CITY'.

      ENDCASE.


      ASSIGN COMPONENT sy-index OF STRUCTURE ls_student TO FIELD-SYMBOL(<lfs_field>).


      ASSIGN <lfs_row>->* TO FIELD-SYMBOL(<lfs_row_val>).

      ASSIGN COMPONENT lv_fname OF STRUCTURE <lfs_row_val> TO FIELD-SYMBOL(<lfs_ref_value>).

      IF <lfs_ref_value> IS ASSIGNED AND <lfs_field> IS ASSIGNED.

        ASSIGN <lfs_ref_value>->* TO FIELD-SYMBOL(<lfs_actual_value>).

        IF <lfs_actual_value> IS ASSIGNED.

          <lfs_field> = <lfs_actual_value>.

        ENDIF.

      ENDIF.

    ENDDO.


    APPEND ls_student TO lt_student.


  ENDLOOP.


  cl_demo_output=>display( lt_student ).


ENDIF.


Serkan AKKAVAK

Computer Engineer BSc

Head of SAP & Software Department

Contact : serkurumsal@yandex.com