This ABAP report is included in the addon package.
&---------------------------------------------------------------------
& Report /CEX/JMP_JSON_EXAMPLE2
&---------------------------------------------------------------------
& This is example code to show the usage of JSON within ABAP
& Store ABAP types into JSON objects for transferring to external
& applications. Map inbound JSON data back to (complex) ABAP objects
&---------------------------------------------------------------------
& (c) 2014 joomp.de
& last changed 2014/02/05
&---------------------------------------------------------------------
REPORT /cex/jmp_json_example2 NO STANDARD PAGE HEADING LINE-SIZE 1023.
-------- interface
PARAMETERS: p_max TYPE sqf_max_rows DEFAULT 10.
-------- local data
DATA: lr_json TYPE REF TO /cex/cl_jmp_json.
DATA: lr_mapper TYPE REF TO /cex/cl_jmp_json_mapper.
DATA: lr_output TYPE REF TO /cex/cl_jmp_json_object.
DATA: lr_jdata TYPE REF TO /cex/if_jmp_json.
DATA: lr_parsed TYPE REF TO /cex/if_jmp_json.
DATA: lr_input TYPE REF TO /cex/cl_jmp_json_object.
DATA: lv_output TYPE string.
DATA: lv_message TYPE string.
DATA: lv_lin TYPE i.
DATA: lr_sflight_t TYPE REF TO /cex/cl_jmp_json_array.
DATA: lr_sflight_s TYPE REF TO /cex/cl_jmp_json_object.
DATA: lv_sflight_s TYPE string.
DATA: lt_sflight TYPE TABLE OF sflight.
DATA: ls_sflight LIKE LINE OF lt_sflight.
DATA: ls_usr02 TYPE usr02.
DATA: BEGIN OF ls_complex,
table_sflight TYPE TABLE OF sflight,
struc_sflight TYPE sflight,
string_sflight TYPE string,
date_sflight TYPE sydatum,
integer_sflight TYPE i,
double_sflight TYPE /cex/jmp_json_double,
usr02 TYPE usr02,
END OF ls_complex.
FIELD-SYMBOLS: <field> TYPE data.
want to leave ?
if &2 > 0 and sy-index > &2.
exit.
endif.
enddo.
END-OF-DEFINITION.
--------- ACTION
START-OF-SELECTION.
-------- 0) select some data
sflight
SELECT * FROM sflight
INTO TABLE lt_sflight
UP TO p_max ROWS.
DESCRIBE TABLE lt_sflight LINES lv_lin.
IF lv_lin EQ 0.
WRITE: / 'No data selected in table SFLIGHT'.
EXIT.
ELSE.
WRITE: / 'Zeilen gelesen:', lv_lin.
ULINE.
ENDIF.
READ TABLE lt_sflight INTO ls_sflight INDEX 1.
usr02
SELECT SINGLE * FROM usr02
INTO ls_usr02
WHERE bname = sy-uname.
write_struc ls_usr02 15.
-------- 1) get the main json handler
lr_json = /cex/cl_jmp_json=>get_instance( ).
-------- 2) get the mapper and an empty output object
lr_mapper = lr_json->get_mapper( ).
lr_output = lr_json->new_object( ).
-------- 3) add different data types to json object
struc with other data types example
CLEAR lr_jdata.
lr_jdata = lr_mapper->map_to_json( ls_usr02 ).
IF lr_jdata IS NOT INITIAL.
lr_output->put( iv_id = 'usr02' ir_data = lr_jdata ).
ENDIF.
-------- 4) get the json as string for output, reset vars
lv_output = lr_output->/cex/if_jmp_json~to_string( ).
WRITE: / 'JSON String:'.
WRITE: / lv_output.
REFRESH lt_sflight.
CLEAR ls_sflight.
-------- 5) get json data from output string
lr_parsed = lr_json->parse( lv_output ).
IF lr_parsed IS INITIAL.
WRITE: / 'Error parsing json input'.
EXIT.
ENDIF.
-------- 6) map json to complex abap object
CLEAR ls_complex.
CALL METHOD lr_mapper->map_from_json
EXPORTING
ir_json = lr_parsed
CHANGING
cv_data = ls_complex
cv_message = lv_message
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE: / 'Errors occured while mapping json to abap:', lv_message.
ELSE.
lt_sflight
DESCRIBE TABLE ls_complex-table_sflight LINES lv_lin.
WRITE: / 'Lines of SFLIGHT parsed from json string (complex):', lv_lin.
ENDIF.
-------- 7) map json data to abap manually
the main json is an object
lr_input ?= lr_parsed.
get the subobjects via known id
lr_sflight_t = lr_input->get_array( 'table_sflight' ).
lr_sflight_s = lr_input->get_object( 'struc_sflight' ).
lv_sflight_s = lr_input->get_string( 'string_sflight' ).
read data back to lt_sflight
IF lr_sflight_t IS INITIAL.
WRITE: / 'table sflight not in json input'.
ELSE.
REFRESH lt_sflight.
CALL METHOD lr_mapper->map_from_json
EXPORTING
is_ddic =
ir_json = lr_sflight_t
CHANGING
cv_data = lt_sflight
cv_message = lv_message
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE: / 'Errors occured while mapping json to abap'.
ELSE.
DESCRIBE TABLE lt_sflight LINES lv_lin.
WRITE: / 'Lines of SFLIGHT parsed from json string (manual) :', lv_lin.
ENDIF.
ENDIF.
read data back to ls_sflight
IF lr_sflight_s IS INITIAL.
WRITE: / 'structure sflight is not in json input'.
ELSE.
CLEAR ls_sflight.
CALL METHOD lr_mapper->map_from_json
EXPORTING
ir_json = lr_sflight_s
CHANGING
cv_data = ls_sflight
cv_message = lv_message
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
WRITE: / 'Errors occured while mapping json to abap'.
ELSE.
WRITE: / 'Fields SFLIGHT read from json:'.