在ABAP中生成任何自定义JSON

您可以使用类ZCL_MDP_JSON库来编码/解析任何JSON。ABAP在本地通过以下功能支持JSON:

通过使用JSON-XML,它被称为特殊XML格式,可用于使用XML表示形式描述的JSON数据。 

通过定义ABAP类型和JSON之间的映射。使用标识转换ID在序列化和反序列化中使用它。

正如您可以在语句CALL TRANSFORMATION中将不同形式的JSON数据指定为XML源一样,可以将JSON指定为目标。

查看以下示例代码:

例:

DATA text TYPE string VALUE `Hi JSON, ABAP here!`.
DATA writer TYPE REF TO cl_sxml_string_writer.
DATA json TYPE xstring.
“ABAP to JSON
writer =cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
CALL TRANSFORMATION id SOURCE text = text
   RESULT XML writer.
json = writer->get_output( ).
“JSON to ABAP
text =`{“TEXT”:”Hi ABAP, JSON here!”}`.
CALL TRANSFORMATION id SOURCE XML text
   RESULT text = text.

JSON / ABAP序列化器和反序列化器

在SAP ERP7.40中,您具有一个简单的转换,可用于将ABAP转换为JSON,并将JSON转换为ABAP。当您需要最高性能并且不担心使用串行器和反序列化器时,这是最合适的。

您也可以参考以下链接: 

https://wiki.scn.sap.com/wiki/display/Snippets/One+more+ABAP+to+JSON+Serializer+and+Deserializer

从ABAP到JSON的用法示例:

DATA: lt_flight TYPE STANDARD TABLE OF sflight,
   lrf_descr TYPE REF TO cl_abap_typedescr,
   lv_json  TYPE string.
SELECT * FROM sflight INTO TABLE lt_flight.

* serialize table lt_flight into JSON, skipping initial fields and converting ABAP field names into camelCase
lv_json =/ui2/cl_json=>serialize( data = lt_flight compress = abap_true pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
WRITE / lv_json.
CLEAR lt_flight.

* deserialize JSON string json into internal table lt_flight doing camelCase to ABAP like field name mapping
/ui2/cl_json=>deserialize(EXPORTING json = lv_json pretty_name =/ui2/cl_json=>pretty_mode-camel_case CHANGING data = lt_flight ).

* serialize ABAP object into JSON string
lrf_descr = cl_abap_typedescr=>describe_by_data( lt_flight ).
lv_json =/ui2/cl_json=>serialize( lrf_descr ).
WRITE / lv_json.