ABAP数据转Json

Json数据类型对应ABAP的定义

json abap 备注
字符串 string、char  
数字 p、i  
对象 结构体  
数组 内表 tyt_xxx TYPE TABLE OF string WITH DEFAULT KEY
数组对象 内表 tyt_xxx TYPE TABLE OF 结构体 WITH DEFAULT KEY
布尔 abap_bool abap的布尔x表示true,空表示false

 

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

 

 

直接上代码

复制代码
TYPES: tyt_storage_site TYPE TABLE OF string WITH DEFAULT KEY,
       BEGIN OF ty_product,
         name           TYPE string,          "商品名称
         number         TYPE i,               "数据
         price          TYPE p DECIMALS 2,    "价格
         storage_site   TYPE tyt_storage_site,"储存位置
         promotion_flag TYPE abap_bool,       "是否为促销商品
       END OF ty_product,
       tyt_product TYPE 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,
      ls_storage_site TYPE LINE OF tyt_storage_site,
      lv_json         TYPE string.


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

ls_product-name = '香梨'.
ls_product-number = 200.
ls_product-price = 888 / 100.
ls_storage_site = '水果区'.
APPEND ls_storage_site TO ls_product-storage_site.
ls_storage_site = '2号货架'.
APPEND ls_storage_site TO ls_product-storage_site.
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 ).

cl_demo_output=>write( lv_json ).
cl_demo_output=>display(  ).
复制代码

 

如果外部系统的命名不完全是驼峰(比如第一个单词首字母的也是大写)、或者是中文,则使用类方法的参数name_mappings进行转换

 

复制代码
TYPES: BEGIN OF ty_data,
         address      TYPE string,
         address_line TYPE string,
         extend1 TYPE string,
       END OF ty_data,
       BEGIN OF ty_name_mapping,
         abap TYPE abap_compname,
         json TYPE string,
       END OF ty_name_mapping.


DATA: lt_name_mapping TYPE HASHED TABLE OF ty_name_mapping WITH UNIQUE KEY abap.

DATA: ls_data TYPE ty_data,
      lv_json TYPE string.

ls_data-address = 'XX省XX市XX区'.
ls_data-address_line = 'XX街道XX号'.
ls_data-extend1 = '中文字段'.

lt_name_mapping = VALUE #( BASE lt_name_mapping
  ( abap = 'address'      json = 'Address' )
  ( abap = 'address_line' json = 'AddressLine' )
  ( abap = 'extend1'      json = '中文字段' )
).

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

cl_demo_output=>write( lv_json ).
cl_demo_output=>display(  ).
复制代码

 

posted @   鲸与海  阅读(696)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示