You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:07:20