首页 > 其他分享 >ABAP数据转Json

ABAP数据转Json

时间:2022-10-10 11:37:00浏览次数:84  
标签:product TYPE storage site lv ABAP ls Json 数据

Json数据类型对应ABAP的定义

json abap 备注
字符串 string、char  
数字 p、i  
对象 结构体、内表  
数组 string 需要而外写逻辑处理
布尔 abap_bool abap的布尔x表示true,空表示false

 

假设外部系统需要的数据是这样的

 

而ABAP内表数据是这样的

直接上代码

TYPES: BEGIN OF ty_product,
         name           TYPE string,        "商品名称
         number         TYPE i,             "数据
         price          TYPE p DECIMALS 2,  "价格
         storage_site   TYPE string,        "储存位置
         promotion_flag TYPE abap_bool,     "是否为促销商品
       END OF ty_product,
       tyt_product TYPE STANDARD TABLE OF ty_product WITH DEFAULT KEY,
       BEGIN OF ty_data,
         products TYPE tyt_product,
       END OF ty_data.

DATA: ls_data         TYPE ty_data,
      ls_product      TYPE ty_product,
      lv_json         TYPE string.


DATA: lt_storage_site TYPE TABLE OF string,
      ls_storage_site LIKE LINE OF lt_storage_site,
      lv_table_lines  TYPE i,
      lv_storage_site TYPE string.

ls_product-name = '苹果'.
ls_product-number = 100.
ls_product-price = 1088 / 100.
ls_product-promotion_flag = 'X'.
ls_product-storage_site = '水果区,2号货架'.
APPEND ls_product TO ls_data-products.
CLEAR ls_product.

ls_product-name = '香梨'.
ls_product-number = 200.
ls_product-price = 888 / 100.
ls_product-storage_site = '水果区,2号货架'.
APPEND ls_product TO ls_data-products.
CLEAR ls_product.

"abap数据转json
/ui2/cl_json=>serialize( EXPORTING data = ls_data
                                   pretty_name = 'X' "空大写,L小写,X驼峰,Y增强驼峰
                         RECEIVING r_json = lv_json ).

"储存位置是数组数据,需要额外处理
LOOP AT ls_data-products INTO ls_product.

  CLEAR: lt_storage_site,lv_storage_site.
  "将储存位置用逗号分割到内表里
  SPLIT ls_product-storage_site AT ',' INTO TABLE lt_storage_site.
  "计算内表行数
  lv_table_lines = lines( lt_storage_site ).

  "拼接成数组
  lv_storage_site = '['.

  LOOP AT lt_storage_site INTO ls_storage_site.
    "最后一行数据不用拼接,号
    IF sy-tabix = lv_table_lines.
      lv_storage_site = lv_storage_site && '"'&& ls_storage_site && '"'.
    ELSE.
      lv_storage_site = lv_storage_site && '"'&& ls_storage_site && '",'.
    ENDIF.
  ENDLOOP.

  lv_storage_site = lv_storage_site && ']'.

  "要替换的内容增加引号
  ls_product-storage_site = '"' && ls_product-storage_site && '"'.

  "替换
  REPLACE ls_product-storage_site WITH lv_storage_site INTO lv_json.

ENDLOOP.

cl_demo_output=>write( ls_data-products ).
cl_demo_output=>write( '转换json后' ).
cl_demo_output=>write( lv_json ).
cl_demo_output=>display(  ).

 

标签:product,TYPE,storage,site,lv,ABAP,ls,Json,数据
From: https://www.cnblogs.com/StephenAmell/p/16775029.html

相关文章

  • 超好用的填报工具,帮你快速搞定企业数据填报!_光点科技
    众所周知,在月底、月初或月中,各职能部门、管理会议和战略决策都在填写报表,加班加点,担心数据填报不及时、不准确等。事实上,绝大多数中小企业使用外国ERP软件,例如QADMfg/Pro,E......
  • Vue系列---【at Socket.writeAfterFIN [as write] (net.js:441:14) at PoolWorker
    1.问题描述:前端是vue项目,打包和打镜像的时候,本地没问题,jenkins物理机打流水线也没问题,但是到容器云平台使用自带的流水线打包打镜像的时候,就报错了。上次成功上线的代......
  • .NET 6配置EF Core数据库链接字符串
    appsetting.json{"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"}},"AllowedHosts":"*",......
  • 构造树型结构数据
    /***构造树型结构数据*@param{*}data数据源*@param{*}idid字段默认'id'*@param{*}parentId父节点字段默认'parentId'*@param{*}children......
  • swiftUI List 自带的拖拽行,及替换数据功能
    使用场景.用户长按某行视图,拖动后插入对应的行.    @StatevardataList=["第一行","第二行","第三行","第四行","第五行"]      varbody:someVie......
  • 数据守护集群部署(两节点实时主备)
    环境说明实例名PORT_NUMMAL_INST_DW_PORTMAL_HOSTMAL_PORTMAL_DW_PORTGRP1_013214133141192.168.44.1736114152141GRP1_023214233142192.168.44.......
  • Docker | 容器数据卷
    目录什么是容器数据卷数据的覆盖问题使用数据卷方式一:直接使用命令挂载-v测试挂载卷1、在容器内部修改文件同步到Linux主机上2、同样地,在Linux上修改挂在卷文件可以同步到......
  • 数据安全之安全存储策略
    1.背景为了保障企业数据安全,信通院最近出台了数据安全管理认证,其中有一个审核条目是安全存储,要求将敏感字段在数据库加密存储,但是加密存储会引发一个问题:如何查询,如何被......
  • 小组项目数据流图
     ......
  • MySQL列的数据类型讲解
    数值tinyint十分小的数据1个字节smallint较小的数据2个字节mediumint中等大小的数据3个字节int标准的整数4个字节常用的intbigint较......