导语:abap和josn转换,在abap中有两种方式,但是第二种转换出来的josn格式字段名没有双引号,我放到网页上也不能识别,所以不知道是干嘛的,但是也贴出来分享一下。
方案一:/ui2/cl_json
测试代码如下,可以直接放到自己的测试程序中,进行测试,通过测试结果可以看到,对于字段名,sap这里是不区分大小写的,字段名输出之后都是小写的,如果接收方有需求,在传出之前用REPLACE语法进行替换一下。
DATA : gt_table TYPE TABLE OF makt.
DATA : gw_table TYPE makt.
CLEAR gw_table.
gw_table-mandt = '200'.
gw_table-matnr = '1001'.
gw_table-spras = '1'.
gw_table-maktx = '测试1'.
gw_table-maktg = 'JOSN测试1'.
APPEND gw_table TO gt_table.
CLEAR gw_table.
gw_table-mandt = '200'.
gw_table-matnr = '1002'.
gw_table-spras = '1'.
gw_table-maktx = '测试2'.
gw_table-maktg = 'JOSN测试2'.
APPEND gw_table TO gt_table.
*-->abap转json
gv_json = /ui2/cl_json=>serialize( data = gt_table compress = abap_false pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
WRITE gv_json.
*-->josn转abap
CLEAR :gv_json,gt_table.
gv_json = '[{"mandt":"200","matnr":"1001","spras":"1","maktx":"测试1","maktg":"JOSN测试1"},{"mandt":"200","matnr":"1002","spras":"1","maktx":"测试2","maktg":"JOSN测试2"}]'.
/ui2/cl_json=>deserialize( EXPORTING json = gv_json pretty_name = /ui2/cl_json=>pretty_mode-camel_case CHANGING data = gt_table ).
LOOP AT gt_table INTO gw_table.
WRITE :/ gw_table-mandt,gw_table-matnr,gw_table-spras,gw_table-maktx,gw_table-maktg.
ENDLOOP.
测试结果
方案二:CL_TREX_JSON_SERIALIZER / CL_TREX_JSON_DESERIALIZER
DATA:zcl_ser TYPE REF TO CL_TREX_JSON_SERIALIZER, "abap转换成josn
zcl_deser TYPE REF TO CL_TREX_JSON_DESERIALIZER, "josn转换成abap
gv_json TYPE string.
DATA : gt_table TYPE TABLE OF makt.
DATA : gw_table TYPE makt.
CLEAR gw_table.
gw_table-mandt = '200'.
gw_table-matnr = '1001'.
gw_table-spras = '1'.
gw_table-maktx = '测试1'.
gw_table-maktg = 'JOSN测试1'.
APPEND gw_table TO gt_table.
CLEAR gw_table.
gw_table-mandt = '200'.
gw_table-matnr = '1002'.
gw_table-spras = '1'.
gw_table-maktx = '测试2'.
gw_table-maktg = 'JOSN测试2'.
APPEND gw_table TO gt_table.
**--->方案一
*-->abap转json
CREATE OBJECT zcl_ser
EXPORTING
data = gt_table.
zcl_ser->serialize( ).
gv_json = zcl_ser->get_data( ).
WRITE gv_json.
*-->josn转abap
CLEAR gv_json.
gv_json = '[{mandt:"200",matnr:"1001",spras:"1",maktx:"测试1",maktg:"JOSN测试1"},{mandt:"200",matnr:"1002",spras:"1",maktx:"测试2",maktg:"JOSN测试2"}]'.
CLEAR : gt_table.
CREATE OBJECT zcl_deser.
zcl_deser->deserialize(
EXPORTING json = gv_json
IMPORTING abap = gt_table ).
LOOP AT gt_table INTO gw_table.
WRITE :/ gw_table-mandt,gw_table-matnr,gw_table-spras,gw_table-maktx,gw_table-maktg.
ENDLOOP.
测试结果
SAP在和外围系统交互的时候,json串里的空格可能会乱码,空格变成#,需要处理一下。
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN ev_json WITH space.
作者:小飞猪猪猪猪猪猪猪–CSDN