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( ).
落霞与孤鹜齐飞,秋水共长天一色
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏