1. 程式人生 > 其它 >ABAP內表與JSON互轉

ABAP內表與JSON互轉


ABAP內表與JSON有很多方法進行互相轉換,這裡我們介紹兩個類分別來實現序列化(ABAP內錶轉JSON)和反序列化(JSON轉ABAP內表)

序列化:CL_TREX_JSON_SERIALIZER

反序列化:CL_TREX_JSON_DESERIALIZER

一、ABAP內錶轉JSON

Demo:

 1 REPORT ztest.
 2 
 3 TYPES:BEGIN OF ty_data,
 4   cola TYPE char5,
 5   colb TYPE char5,
 6   colc TYPE char5,
 7   END OF ty_data.
 8 
 9 DATA: lt_json     TYPE
string, 10 wa_data TYPE ty_data, 11 lt_data TYPE TABLE OF ty_data, 12 serializer TYPE REF TO cl_trex_json_serializer. 13 14 15 "向內表中插入一條資料 16 wa_data-cola = '測試A'. 17 wa_data-colb = '測試B'. 18 wa_data-colc = '測試C'. 19 APPEND wa_data TO lt_data. 20 21 "內錶轉json 22 CLEAR lt_json.
23 CREATE OBJECT serializer EXPORTING data = lt_data[]. 24 CALL METHOD serializer->serialize( ). 25 lt_json = serializer->get_data( ). 26 27 WRITE lt_json.
View Code

執行結果:

二、JSON轉ABAP內表

我們使用上面生成的JSON報文進行演示

Demo:

 1 REPORT ztest.
 2 
 3 TYPES:BEGIN OF ty_data,
 4   cola TYPE char5,
 5   colb TYPE
char5, 6 colc TYPE char5, 7 END OF ty_data. 8 9 DATA: lt_json TYPE string, 10 wa_data TYPE ty_data, 11 lt_data TYPE TABLE OF ty_data, 12 deserializer TYPE REF TO cl_trex_json_deserializer. 13 14 15 "lt_json賦值 16 lt_json = '[{cola: "測試A", colb: "測試B", colc: "測試C"}]'. 17 18 19 "JSON轉為ABAP內表 20 CREATE OBJECT deserializer. 21 CALL METHOD deserializer->deserialize( 22 EXPORTING 23 json = lt_json 24 IMPORTING 25 abap = lt_data ). 26 27 LOOP AT lt_data INTO wa_data. 28 WRITE:wa_data-cola,wa_data-colb,wa_data-colc. 29 ENDLOOP.
View Code

執行結果:

注意:我們使用上述方法生成的JSON報文,key是沒有引號的

[{cola: "測試A", colb: "測試B", colc: "測試C"}]

帶引號的是這樣的

[{"cola": "測試A", "colb": "測試B", "colc": "測試C"}]

這樣雖然在SAP系統內可以正常解析,但是有些外部系統如果只能解析key帶引號的JSON報文就會導致解析失敗。如果實際應用中出現了這個問題,我們需要對

CL_TREX_JSON_SERIALIZER、CL_TREX_JSON_DESERIALIZER這兩個方法進行一點小的改造。我們下一篇寫一下具體改造的操作。