ABAP内表与JSON之间的转换

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
JSON难阅读,试试:JSON在线编辑器
JSON没有多余的标签,所以JSON比xml网络传输效率更高。

JSON与ABAP格式互转
1、cl_trex_json_serializer、cl_trex_json_deserializer方式
DATA: lo_json_ser TYPE REF TO cl_trex_json_serializer,
      lo_json_des TYPE REF TO cl_trex_json_deserializer.
DATA: json_string TYPE string.

*内表->JSON
  CREATE OBJECT lo_json_ser
    EXPORTING
      data = 内表.
  CALL METHOD lo_json_ser->serialize.
  CALL METHOD lo_json_ser->get_data
    RECEIVING
      rval = json_string.

  WRITE:json_string.
  CLEAR:lt_spfli[].
*JSON->内表
  CREATE OBJECT lo_json_des.
  CALL METHOD lo_json_des->deserialize
    EXPORTING
      json = json_string
    IMPORTING
      abap = 内表.

2、CALL TRANSFORMATION id 方式
DATA: lo_writer          TYPE REF TO cl_sxml_string_writer,
      lv_output_length   TYPE i,
      lt_binary_tab      TYPE STANDARD TABLE OF sdokcntbin,
      lv_jsonx           TYPE xstring,
      lv_json            TYPE string.

* ABAP to JSON
lo_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
CALL TRANSFORMATION id SOURCE text = 内表 RESULT XML lo_writer.
lv_jsonx = lo_writer->get_output( ).

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer        = lv_jsonx
  IMPORTING
    output_length = lv_output_length
  TABLES
    binary_tab    = lt_binary_tab.

CALL FUNCTION 'SCMS_BINARY_TO_STRING'
  EXPORTING
    input_length  = lv_output_length
  IMPORTING
    text_buffer   = lv_json
    output_length = lv_output_length
  TABLES
    binary_tab    = lt_binary_tab.

* JSON to ABAP
CALL TRANSFORMATION id SOURCE XML lv_jsonx RESULT text = 内表.
该种JSON转换生成的数据,比内表数据多了一部分“TEXT”字符串,也不是很满意

3、/UI2/CL_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.

/UI2/CL_JSON方式转换生成的JSON格式就完美了,他不仅支持结构、内表转换成JSON,还支持嵌套结构deep structure这种复杂的结构,了解更多请参考:
https://wiki.scn.sap.com/wiki/display/Snippets/One+more+ABAP+to+JSON+Serializer+and+Deserializer

注意:ABAP中定义变量是不区分大小写,而JAVA中变量是区分大小写的,所以需要对字符串替换一下
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值