一、首选:/ui2/cl_json {'key':'value'}
/ui2/cl_json=>deserialize( EXPORTING json = json
CHANGING data = data ).
二、cl_trex_json_serializer ;lcl_trex_json_deserializer 改造版。 {'key':'value'}
REPORT zjw_test.
"多层结构内表 格式化为JSON 格式
CLASS lcl_trex_json_serializer DEFINITION DEFERRED.
"JSON 格式 转多层内表
CLASS lcl_trex_json_deserializer DEFINITION DEFERRED.
CLASS lcl_trex_json_serializer DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:class_constructor.
METHODS:
constructor
IMPORTING !data TYPE data ,
serialize,
get_data RETURNING
VALUE(rval) TYPE string.
PRIVATE SECTION.
DATA:
fragments TYPE trext_string,
data_ref TYPE REF TO data.
CLASS-DATA: c_colon TYPE string.
CLASS-DATA: c_comma TYPE string.
METHODS: recurse
IMPORTING
!data TYPE data .
ENDCLASS.
CLASS lcl_trex_json_deserializer DEFINITION.
PUBLIC SECTION.
*"* public components of class CL_TREX_JSON_DESERIALIZER
*"* do not include other source files here!!!
INTERFACES if_trex_serialization .
METHODS deserialize
IMPORTING
!json TYPE string
EXPORTING
!abap TYPE any .
METHODS deserialize_ref
IMPORTING
!json TYPE string
!ref TYPE REF TO object .
PRIVATE SECTION.
*"* private components of class CL_TREX_JSON_DESERIALIZER
*"* do not include other source files here!!!
METHODS deserialize_node
IMPORTING
!json TYPE string
CHANGING
!offset TYPE i DEFAULT 0
!node TYPE any
RAISING
cx_trex_serialization .
METHODS deserialize_object
IMPORTING
!json TYPE string
CHANGING
!offset TYPE i DEFAULT 0
!node TYPE any
RAISING
cx_trex_serialization .
METHODS deserialize_array
IMPORTING
!json TYPE string
CHANGING
!offset TYPE i DEFAULT 0
!node TYPE any
RAISING
cx_trex_serialization .
ENDCLASS.
CLASS lcl_trex_json_deserializer IMPLEMENTATION.
METHOD deserialize_array.
DATA:
l_done TYPE abap_bool,
l_rec TYPE REF TO data.
FIELD-SYMBOLS:
<itab> TYPE ANY TABLE,
<rec> TYPE data.
ADD 1 TO offset . "skip [
ASSIGN node TO <itab> .
* create record
CREATE DATA l_rec LIKE LINE OF <itab> .
ASSIGN l_rec->* TO <rec> .
WHILE l_done = abap_false .
CLEAR <rec> .
deserialize_node(
EXPORTING
json = json
CHANGING
offset = offset
node = <rec> ) .
INSERT <rec> INTO TABLE <itab> .
FIND REGEX ',|\]' IN SECTION OFFSET offset OF json MATCH OFFSET offset .
IF sy-subrc <> 0 .
RAISE EXCEPTION TYPE cx_trex_serialization .
ENDIF .
IF json+offset(1) = ']' .
l_done = abap_true .
ENDIF .
ADD 1 TO offset .
ENDWHILE .
ENDMETHOD.
METHOD deserialize.
deserialize_node(
EXPORTING
json = json
CHANGING
node = abap ) .
ENDMETHOD.
METHOD deserialize_node.
DATA:
l_len TYPE i,
l_string TYPE string,
l_number TYPE string.
FIND REGEX '\{|\[|"([^":]*)"|(\d+)' IN SECTION OFFSET offset OF json "changed by jw
MATCH OFFSET offset MATCH LENGTH l_len
SUBMATCHES l_string l_number .