ABAP內表與JSON互轉
阿新 • • 發佈:2021-06-21
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 TYPEView Codestring, 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.
執行結果:
二、JSON轉ABAP內表
我們使用上面生成的JSON報文進行演示
Demo:
1 REPORT ztest. 2 3 TYPES:BEGIN OF ty_data, 4 cola TYPE char5, 5 colb TYPEView Codechar5, 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.
執行結果:
注意:我們使用上述方法生成的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這兩個方法進行一點小的改造。我們下一篇寫一下具體改造的操作。