SAP 自定义解析JSON方法

本文描述了一个过程,使用ALV在JSON字符串中解析数据,包括字段名、状态、EBELNESSC等,并将结果填充到标准表格中,展示了如何处理不同键值对并更新相关变量。

JSON串
HEADER = ‘{“STATUS”:“1”,“BSART”:“SH02”,“LIFNR”:“0040003799”,“EKORG”:“SHM1”,“EKGRP”:“SH2”,“BUKRS”:“5200”,“ZCMISNO”:"",“ZCRTNAME”:"",“ZSWZXR”:"",“LONGTEXT”:"",“ERNAM”:"",“WAERS”:"",“EBELNESSC”:""}’.

FORM analysis_json TABLES tab_alv TYPE STANDARD TABLE
USING t
CHANGING gv_text status ebelnessc tdline.
FIELD-SYMBOLS: .

DATA:BEGIN OF tab_j,
txt(262143) TYPE c,
END OF tab_j.
DATA:tab1 LIKE TABLE OF tab_j WITH HEADER LINE.
DATA:tab2 LIKE TABLE OF tab_j WITH HEADER LINE.
DATA:lv_fld_name TYPE string.
DATA:key TYPE string.
DATA:value TYPE string.
REPLACE ALL OCCURRENCES OF ‘[’ IN t WITH ‘’.
REPLACE ALL OCCURRENCES OF ‘]’ IN t WITH ‘’.
SPLIT t AT ‘}’ INTO TABLE tab1.
LOOP AT tab1.
REPLACE ALL OCCURRENCES OF ‘{’ IN tab1-txt WITH ‘’.
SPLIT tab1-txt AT ‘,’ INTO TABLE tab2.
LOOP AT tab2.
IF tab2-txt <> ‘’.
CLEAR:key,value.
REPLACE ALL OCCURRENCES OF ‘"’ IN t

SAP 旧版本中实现 JSON 数据转换,通常依赖于标准类或自定义逻辑来处理 ABAP 内表与 JSON 字符串之间的序列化和反序列化操作。由于不同版本的 SAP 系统对 JSON 支持程度不同,以下是一些通用且兼容性强的方法和步骤: ### 使用 `CL_TREX_JSON_SERIALIZER` 和 `CL_TREX_JSON_DESERIALIZER` 这两个类适用于大多数支持 SAP NetWeaver 的系统版本,常用于将 ABAP 内表转换为 JSON 字符串,以及从 JSON 字符串解析回 ABAP 结构。 ```abap DATA: lv_json TYPE string, lt_vbak TYPE TABLE OF vbak. SELECT * FROM vbak INTO CORRESPONDING FIELDS OF TABLE lt_vbak UP TO 10 ROWS. DATA(lo_serializer) = NEW cl_trex_json_serializer( ). lo_serializer->serialize( data = lt_vbak ). lv_json = lo_serializer->get_data( ). WRITE:/ lv_json. ``` 上述代码实现了将 `VBAK` 表数据序列化为 JSON 格式字符串。如果需要反向操作,则可以使用 `CL_TREX_JSON_DESERIALIZER` 类进行解析: ```abap DATA(lo_deserializer) = NEW cl_trex_json_deserializer( ). lo_deserializer->deserialize( EXPORTING json = lv_json IMPORTING abap = lt_vbak ). LOOP AT lt_vbak INTO DATA(ls_vbak). WRITE:/ ls_vbak-erdat. ENDLOOP. ``` ### 使用 `/UI2/CL_JSON`(适用于 UI5 集成场景) 该类支持更复杂的结构和类型映射,尤其适用于前端交互场景中的 JSON 转换需求。其主要优势在于可处理嵌套结构、布尔值、数字数组等复杂类型。 ```abap DATA(lo_json) = NEW /ui2/cl_json( ). DATA(lv_json) = lo_json->serialize( data = ls_data ). ``` ### 自定义字段映射与驼峰命名支持 若希望 JSON 键名采用驼峰格式,可以通过设置 `CL_JSON` 类的 `PRETTY_NAME` 参数,并确保字段的短文本(Short Text)已配置为驼峰形式: ```abap lo_json->set_options( pretty_name = 'X' ). ``` ### 布尔类型处理 对于布尔类型字段,在 ABAP 中需定义为特定类型如 `ABAP_BOOL` 或 `XFELD`,以确保序列化时能正确转换为 JSON 中的 `true` 或 `false` [^4]。 TYPES: BEGIN OF ty_bool, flag TYPE abap_bool, END OF ty_bool. ### 数字和字符串数组的处理 若需生成类似如下结构的 JSON: ```json { "MATNR1": ["1001", "1002", "1003"], "MATNR2": [1001, 1002, 1003] } ``` 应定义包含字段类型的内表结构,并在序列化时使用 `/UI2/CL_JSON` 实例进行转换 [^3]。 TYPES: BEGIN OF ty_structure, matnr1 TYPE string_table, matnr2 TYPE int4_table, END OF ty_structure. DATA(ls_data) = VALUE ty_structure( matnr1 = lt_matnr matnr2 = lt_matnr ). DATA(lo_json) = NEW /ui2/cl_json( ). DATA(lv_json) = lo_json->serialize( data = ls_data ). WRITE:/ lv_json. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值