ABAP 7.5中如何反序列化含空格字段名的JSON?
解决ABAP 7.5中反序列化带空格字段名的JSON问题
在ABAP 7.5中,使用/ui2/cl_json=>deserialize处理含空格字段名的JSON时,可通过以下两种方案实现字段映射:
方案一:使用ABAP注解(推荐长期使用)
通过在类型定义中添加@JSON(name = 'JSON字段名')注解,将带空格的JSON字段映射到合法的ABAP字段名:
* 定义带注解的结构体类型 TYPES: BEGIN OF ty_order, order_id TYPE i, " 映射JSON中的"Order Due Date"字段 @JSON(name = 'Order Due Date') order_due_date TYPE d, " 映射JSON中的"Customer Address"字段 @JSON(name = 'Customer Address') customer_address TYPE string, END OF ty_order. TYPES tt_order TYPE STANDARD TABLE OF ty_order WITH EMPTY KEY. DATA(lt_orders) = VALUE tt_order( ). * 示例JSON数据 DATA(lv_json) = `[{"Order ID":1,"Order Due Date":"2024-10-01","Customer Address":"123 Main St"},{"Order ID":2,"Order Due Date":"2024-10-05","Customer Address":"456 Oak Ave"}]`. * 反序列化时必须关闭注解忽略开关 /ui2/cl_json=>deserialize( EXPORTING json = lv_json iv_ignore_annotations = abap_false CHANGING data = lt_orders ).
该方案的优势是类型定义与映射逻辑绑定,代码可读性高,适合重复使用的业务场景。
方案二:使用字段映射表(适合临时场景)
如果不想修改类型定义,可通过it_field_mapping参数传递字段映射关系:
* 常规ABAP类型定义(无注解) TYPES: BEGIN OF ty_order, order_id TYPE i, order_due_date TYPE d, customer_address TYPE string, END OF ty_order. TYPES tt_order TYPE STANDARD TABLE OF ty_order WITH EMPTY KEY. DATA(lt_orders) = VALUE tt_order( ). DATA(lv_json) = `[{"Order ID":1,"Order Due Date":"2024-10-01","Customer Address":"123 Main St"},{"Order ID":2,"Order Due Date":"2024-10-05","Customer Address":"456 Oak Ave"}]`. * 构建字段映射表:ABAP字段名 -> JSON字段名 DATA(lt_field_mapping) = VALUE /ui2/cl_json=>ty_field_mapping( ( abap_field = 'ORDER_ID' json_field = 'Order ID' ) ( abap_field = 'ORDER_DUE_DATE' json_field = 'Order Due Date' ) ( abap_field = 'CUSTOMER_ADDRESS' json_field = 'Customer Address' ) ). * 传入映射表完成反序列化 /ui2/cl_json=>deserialize( EXPORTING json = lv_json it_field_mapping = lt_field_mapping CHANGING data = lt_orders ).
此方案无需修改原有类型,灵活度高,适合临时处理特定JSON数据的场景。
注意事项
- ABAP字段名需用大写形式传入映射表,因为ABAP内部会将字段名转换为大写处理
- 确保
/ui2/cl_json的版本支持上述参数(ABAP 7.5及以上版本默认支持)
内容的提问来源于stack exchange,提问作者theLuckyOne
相关产品推荐
相关产品推荐

