一. 内表转JSON:
1. 使用类:cl_trex_json_serializer
例子:
DATA: BEGIN OF ls_ekko,
ebeln TYPE ekko-ebeln,
lifnr TYPE ekko-lifnr,
name1 TYPE lfa1-name1,
END OF ls_ekko.
DATA: BEGIN OF ls_ekpo,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
matnr TYPE ekpo-matnr,
maktx TYPE makt-maktx,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
END OF ls_ekpo.
DATA: lt_ekko LIKE TABLE OF ls_ekko,
lt_ekpo LIKE TABLE OF ls_ekpo.
CLEAR ls_ekko.
" 抬头
ls_ekko-ebeln = '5100000001'.
ls_ekko-lifnr = '100001'.
ls_ekko-name1 = '供应商一'.
APPEND ls_ekko TO lt_ekko.
" 行项目10
CLEAR ls_ekpo.
ls_ekpo-ebelp = '10'.
ls_ekpo-matnr = 'A0001'.
ls_ekpo-maktx = '物料一'.
ls_ekpo-menge = '50'.
ls_ekpo-meins = 'EA'.
APPEND ls_ekpo TO lt_ekpo.
*------------------------------------------------------------------内表转JSON
DATA:lo_json_ser TYPE REF TO cl_trex_json_serializer,
json_string TYPE string,
result TYPE string.
CREATE OBJECT lo_json_ser
EXPORTING
data = lt_ekko[].
CALL METHOD lo_json_ser->serialize.
CALL METHOD lo_json_ser->get_data(
RECEIVING
rval = json_string ).
IF sy-subrc EQ 0.
WRITE:/ 'JSON:' , json_string.
ENDIF.
结果:
2. JSON字符串转内表:CL_TREX_JSON_DESERIALIZER
REFRESH:lt_ekko[].
DATA: json_des TYPE REF TO cl_trex_json_deserializer.
DATA:lt_json LIKE TABLE OF ls_ekko WITH HEADER LINE.
CREATE OBJECT json_des.
CALL METHOD json_des->deserialize
EXPORTING
json = json_string
IMPORTING
abap = lt_ekko[].
二.内表转JSON的第二种方式:
1.内表转JSON:使用类: /ui2/cl_json
例子:
DATA: json_input TYPE STRING.
DATA:get_consumption_request TYPE zget_consumption_request,
get_consumption_response TYPE zget_consumption_response.
get_consumption_request-get_consume_param = /ui2/cl_json=>serialize( EXPORTING data = lt_ekko[]
compress = abap_false"abap_true
pretty_name = /ui2/cl_json=>pretty_mode-none ).
*-----------------------------------------------------------------------------------------------------JSON 转内表
json_input = get_consumption_request-get_consume_param.
WRITE:/ 'JSON:' , json_input.
2. JSON转内表:
REFRESH:lt_ekko[].
TRY.
/ui2/cl_json=>deserialize( EXPORTING json = json_input "JSON数据
CHANGING data = lt_ekko[] ). "ty_out 是结构中嵌套表的存在
CATCH cx_root INTO lo_cx_root.
ENDTRY.
二. 内表转XML:
使用事务代码STRANS:
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
<tt:root name="ROOT"/>
<tt:root name="IT_EKKO"/>
<tt:root name="IT_EKPO"/>
<tt:template>
<ROOT>
<HEAD>
<tt:loop name="N_EKKO" ref="IT_EKKO">
<EBELN>
<tt:value ref="$N_EKKO.EBELN"/>
</EBELN>
<LIFNR>
<tt:value ref="$N_EKKO.LIFNR"/>
</LIFNR>
<NAME1>
<tt:value ref="$N_EKKO.NAME1"/>
</NAME1>
</tt:loop>
</HEAD>
<ITEM>
<tt:loop name="N_EKPO" ref="IT_EKPO">
<EBELN>
<tt:value ref="$N_EKPO.EBELN"/>
</EBELN>
<EBELP>
<tt:value ref="$N_EKPO.EBELP"/>
</EBELP>
<MATNR>
<tt:value ref="$N_EKPO.MATNR"/>
</MATNR>
<MAKTX>
<tt:value ref="$N_EKPO.MAKTX"/>
</MAKTX>
<MENGE>
<tt:value ref="$N_EKPO.MENGE"/>
</MENGE>
<MEINS>
<tt:value ref="$N_EKPO.MEINS"/>
</MEINS>
</tt:loop>
</ITEM>
</ROOT>
</tt:template>
</tt:transform>
1. 调用建好的STRANS:
CALL TRANSFORMATION ZTRANS
SOURCE IT_EKKO = LT_EKKO
IT_EKPO = LT_EKPO
RESULT XML LV_XML.
2. 展示:
3. xml转内表:
REFRESH: LT_EKKO,LT_EKPO.
"将XML转换为内表
DATA: XML_XSTRING TYPE XSTRING,
XML_STRING TYPE STRING,
LO_OREF TYPE REF TO CX_ST_ERROR,
LV_MESSAGE TYPE CHAR200. "输出参数
TRY.
CALL TRANSFORMATION ZTRANS
SOURCE XML LV_XML
RESULT IT_EKKO = LT_EKKO
IT_EKPO = LT_EKPO.
CATCH CX_ST_ERROR INTO LO_OREF.
"返回XML解析错误
LV_MESSAGE = LO_OREF->GET_TEXT( ).
ENDTRY.
WRITE /:LV_MESSAGE.
本文暂时没有评论,来添加一个吧(●'◡'●)