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.
执行结果:
二、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.
执行结果:
注意:我们使用上述方法生成的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这两个方法进行一点小的改造。我们下一篇写一下具体改造的操作。