日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SAP中ABAP格式与JSON格式互转方法研究

發布時間:2025/3/20 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP中ABAP格式与JSON格式互转方法研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、JSON概念
JSON(JavaScript Object Notation) 是一種輕量級的 數據交換 格式。

JSON數據格式示例:
  • {
  • ? ? "學生": [
  • ? ?? ???{"姓名":"小明","年齡":23},
  • ? ?? ???{"姓名":"大憨","年齡":24}
  • ? ? ]
  • }
  • 復制代碼
    一個對象以“{”(左括號)開始,“}”(右括號)結束
    一個數組以“[”(左中括號)開始,“]”(右中括號)結束

    二、JSON與XML
    XML數據格式:
  • <?xml version="1.0" encoding="utf-8"?>
  • <country>
  • ? ? <province>
  • ? ?? ???<name>黑龍江</name>
  • ? ?? ???<cities>
  • ? ?? ?? ?? ?<city>哈爾濱</city>
  • ? ?? ?? ?? ?<city>大慶</city>
  • ? ?? ???</cities>
  • ? ? </province>
  • ? ? <province>
  • ? ?? ???<name>廣東</name>
  • ? ?? ???<cities>
  • ? ?? ?? ?? ?<city>廣州</city>
  • ? ?? ?? ?? ?<city>深圳</city>
  • ? ?? ?? ?? ?<city>珠海</city>
  • ? ?? ???</cities>
  • ? ? </province>
  • </country>
  • 復制代碼
    編碼的可讀性,xml有明顯的優勢,畢竟人類的語言更貼近這樣的說明結構。json讀起來更像一個數據塊,讀起來就比較費解了。不過,我們讀起來費解的語言,恰恰是適合機器閱讀。
    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.

  • DATA:BEGIN OF lt_spfli OCCURS 0,
  • ? ?? ???carrid? ? TYPE spfli-carrid,
  • ? ?? ???connid? ? TYPE spfli-connid,
  • ? ?? ???cityfrom??TYPE spfli-cityfrom,
  • ? ?? ???countryto TYPE spfli-countryto,
  • ? ???END OF lt_spfli.

  • START-OF-SELECTION.

  • ??SELECT
  • ? ? carrid
  • ? ? connid
  • ? ? cityfrom
  • ? ? countryto
  • ??UP TO 10 ROWS
  • ??INTO TABLE lt_spfli
  • ??FROM spfli.


  • *內表->JSON
  • ??CREATE OBJECT lo_json_ser
  • ? ? EXPORTING
  • ? ?? ?data = lt_spfli[].
  • ??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 = lt_spfli[].
  • 復制代碼
    ?
    該種轉換方式,生成的JSON,KEY關鍵字沒有引號,字符串中包含空格,如果與第三方系統做接口時,就會因為JSON格式問題,導致接口失敗。

    2、CALL TRANSFORMATION id 方式
  • DATA:BEGIN OF lt_spfli OCCURS 0,
  • ? ?? ???carrid? ? TYPE spfli-carrid,
  • ? ?? ???connid? ? TYPE spfli-connid,
  • ? ?? ???cityfrom??TYPE spfli-cityfrom,
  • ? ?? ???countryto TYPE spfli-countryto,
  • ? ???END OF lt_spfli.
  • 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.

  • SELECT??carrid
  • ? ?? ???connid
  • ? ?? ???cityfrom
  • ? ?? ???countryto
  • UP TO 10 ROWS
  • INTO TABLE lt_spfli
  • FROM spfli.

  • * ABAP to JSON
  • lo_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
  • CALL TRANSFORMATION id SOURCE text = lt_spfli[] 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 = lt_spfli.
  • 復制代碼
    ?
    該種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中變量是區分大小寫的,所以需要對字符串替換一下,如下:
  • REPLACE ALL OCCURRENCES OF 'contactname' IN post_string WITH 'contactName'.
  • 復制代碼

    總結

    以上是生活随笔為你收集整理的SAP中ABAP格式与JSON格式互转方法研究的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。