ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABAP学习(25):内表数据生成JSON字符串

2022-03-19 09:02:20  阅读:272  来源: 互联网

标签:25 fee 内表 json detail JSON lt ls TYPE


ABAP JSON格式字符串

ABAP内表表转换JSON字符串。

方式1:使用cl_trex_json_serializer和cl_trex_json_deserializer完成ABAP TO JSON,JSON TO ABAP互相转换。

方式2:使用CALL TRANSFORMATION这个语句实现转换。

示例:

"测试json字符串
FORM f_test_json.
 "方式1:这种转换key值没有双引号
 DATA:lt_spfli TYPE TABLE OF spfli.
 DATA:ls_spfli LIKE LINE OF lt_spfli.
 "abap to json编码
 DATA:lo_serialize TYPE REF TO cl_trex_json_serializer.
 "json to abap
 DATA:lo_deserialize TYPE REF TO cl_trex_json_deserializer.
 DATA:lv_json TYPE string.

 "abap to json
 SELECT * INTO TABLE lt_spfli FROM spfli.
 "实例化对象
 CREATE OBJECT lo_serialize
  EXPORTING
    data = lt_spfli.
 "串行化
 lo_serialize->serialize( ).
 lv_json = lo_serialize->get_data( ).
 WRITE:/ lv_json.
 "json to abap
 CLEAR lt_spfli[].
 CREATE OBJECT lo_deserialize.
  lo_deserialize->deserialize(
    EXPORTING
      json = lv_json
    IMPORTING
      abap = lt_spfli
     ).
  LOOP AT lt_spfli INTO ls_spfli.
    WRITE:/ ls_spfli-carrid.
  ENDLOOP.


 "方式2:这种转换key值有双引号
"Transformation:ID,可以通过Tcode:STRANS查看,可以定义自己需要格式
  TYPES:BEGIN OF s_fee,
        plan TYPE C LENGTH 10,
        cost TYPE P LENGTH 8 DECIMALS 2,
        percent TYPE C LENGTH 4,
       END OF s_fee.
 TYPES:BEGIN OF s_detail,
        f_type TYPE C LENGTH 2,
        date1 TYPE C LENGTH 8,
        date2 TYPE C LENGTH 8,
       END OF s_detail.
 DATA:lt_fee TYPE TABLE OF s_fee.
 DATA:ls_fee LIKE LINE OF lt_fee.
 DATA:lt_detail TYPE TABLE OF s_detail.
 DATA:ls_detail LIKE LINE OF lt_detail.
 "转换的类对象
 DATA:lo_json_writer TYPE REF TO cl_sxml_string_writer.
 DATA:lv_json_x TYPE xstring.
 TYPES:s_line TYPE C LENGTH 255.
 DATA:lt_text TYPE TABLE OF s_line.
 DATA:ls_text LIKE LINE OF lt_text.

 DO 3 TIMES.
   ls_fee-plan = 'plan' && sy-index.
   ls_fee-cost = 10 * sy-index.
   ls_fee-percent = '12%'.
   APPEND ls_fee TO lt_fee.
   ls_detail-f_type = 'AA'.
   ls_detail-date1 = sy-datum + sy-index.
   ls_detail-date2 = sy-datum + sy-index.
   APPEND ls_detail TO lt_detail.
 ENDDO.

 lo_json_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
 CALL TRANSFORMATION ID
  SOURCE
    fee = lt_fee
    detail = lt_detail
  RESULT XML lo_json_writer.
 lv_json_x = lo_json_writer->get_output( ).
 "abap to json
 CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
    EXPORTING
      im_xstring  = lv_json_x
      im_encoding = 'UTF-8'
    IMPORTING
      ex_string   = lv_json.
  "将字符串拆分到table
 CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
      EXPORTING
        text  = lv_json
      TABLES
        ftext_tab  = lt_text.
 LOOP AT lt_text INTO ls_text.
   WRITE:/ ls_text.
 ENDLOOP.

 "json to abap
 CLEAR lt_fee[].
 CLEAR lt_detail[].
 CALL TRANSFORMATION ID
  SOURCE XML lv_json
  RESULT
    fee = lt_fee
    detail = lt_detail.
 LOOP AT lt_detail INTO ls_detail.
   WRITE:/ ls_detail-f_type,ls_detail-date1,ls_detail-date2.
 ENDLOOP.
 LOOP AT lt_fee INTO ls_fee.
   WRITE:/ ls_fee-plan,ls_fee-cost,ls_fee-percent.
 ENDLOOP.
ENDFORM.

 

标签:25,fee,内表,json,detail,JSON,lt,ls,TYPE
来源: https://www.cnblogs.com/tangToms/p/16025405.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有