您可以使用类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.