温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

abap结构或内表怎么实现与json字符串相互转换.

发布时间:2021-12-29 17:50:36 来源:亿速云 阅读:411 作者:iii 栏目:编程语言

本篇内容介绍了“abap结构或内表怎么实现与json字符串相互转换.”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

可使用的类有很多,如cl_trex_json_serializer与cl_trex_json_deserializer,SAP也为我们提供了CL_FDT_JSON, /UI2/CL_JSON等来进行JSON的序列化与反序列化。

由于sap的版本问题,可能某些类在服务器上不存在而无法使用。该 博客 作者详细描述了如何用abap代码使用序列化与反序列化,

同时提供了/UI2/CL_JSON的代码,可供 下载 使用。

在此我提供一个将/UI2/CL_JSON代码处理好的includeZBC_UI2_JSON_CLS.txt,供大家在缺少该类的情况下,添加到主程序中使用。

------------------------------------------------------------------------------------------------------------------------------------------

1、如何使用cl_trex_json_serializer与cl_trex_json_deserializer实现序列化与反序列化。

(我的sap版本中没有类cl_trex_json_deserializerZBC_CL_TREX_JSON_DESERIALIZER.txt,include供大家上传使用)

REPORT yaiolos_test_06.
" **********************************************************************
"! Usage examples and documentation can be found on SCN:
" http://wiki.scn.sap.com/wiki/display/Snippets/One+more+ABAP+to+JSON+Serializer+and+Deserializer
" **********************************************************************  "
INCLUDE zbc_ui2_json_cls.
INCLUDE zbc_cl_trex_json_deserializer.

DATA: lt_flight TYPE STANDARD TABLE OF sflight WITH HEADER LINE,
      lv_json   TYPE string,
      lv_json_out TYPE string,
      lv_json_len TYPE i.
DATA:
  serializer   TYPE REF TO cl_trex_json_serializer,
  deserializer TYPE REF TO zcl_trex_json_deserializer.

START-OF-SELECTION.
***序列化
**********************************************************************
*Usage examples and documentation can be found on https://www.cnblogs.com/hhelibeb/p/6617488.html
**********************************************************************
  SELECT * FROM sflight INTO TABLE lt_flight.

  CREATE OBJECT serializer
    EXPORTING
      DATA = lt_flight[].

  serializer->serialize( ).

  lv_json = serializer->get_data( ).

  lv_json_out = lv_json.

  DO.
    lv_json_len = strlen( lv_json_out ).
    IF lv_json_len < 100.
      WRITE / lv_json_out.
      EXIT.
    ELSE.
      WRITE / lv_json_out+100.
    ENDIF.
    lv_json_out = lv_json_out+100.

  ENDDO.

***反序列化
  REFRESH lt_flight.

  CREATE OBJECT deserializer.

  deserializer->deserialize(
      EXPORTING json = lv_json
      IMPORTING abap = lt_flight[] ).

  LOOP AT lt_flight.
    WRITE /: lt_flight-carrid.
  ENDLOOP. 

2、使用/ui2/cl_json来序列化和反序列化json字符串。

REPORT yaiolos_test_07.
" **********************************************************************
"! Usage examples and documentation can be found on SCN:
" http://wiki.scn.sap.com/wiki/display/Snippets/One+more+ABAP+to+JSON+Serializer+and+Deserializer
" **********************************************************************  "
INCLUDE zbc_ui2_json_cls.
INCLUDE zbc_cl_trex_json_deserializer.
DATA: lt_flight TYPE STANDARD TABLE OF sflight,
      ls_flight TYPE sflight,
      lrf_descr TYPE REF TO cl_abap_typedescr,
      lv_json   TYPE string.

DATA : lv_json_len TYPE i,
       lv_json_out TYPE string.
DEFINE macro_write.

  lv_json_out = &1.

  do.
    lv_json_len = strlen( lv_json_out ).
    if lv_json_len < 100.
      write / lv_json_out.
      exit.
    else.
      write / lv_json_out+100.
    endif.
    lv_json_out = lv_json_out+100.

  enddo.
END-OF-DEFINITION.

START-OF-SELECTION.
  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 = zui2_json=>serialize( data = lt_flight compress = abap_true pretty_name = zui2_json=>pretty_mode-camel_case ).
  macro_write lv_json.

  CLEAR lt_flight.

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

  LOOP AT lt_flight INTO ls_flight.
    WRITE / ls_flight-carrid.
  ENDLOOP. 

与1转化的不同点在于字段名是否有"号包含,1的方式使用标准json格式无法解析,2更通用。

“abap结构或内表怎么实现与json字符串相互转换.”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI