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

ABAP中使用CALL TRANSFORMATION处理空值/初始值的序列化配置

当然可以!CALL TRANSFORMATION完全支持通过配置参数来控制初始字段的序列化行为,刚好能实现你想要的两种效果——把初始值转成null,或者直接忽略初始字段不输出。下面给你详细讲两种方案的具体实现:

方案1:将初始字段序列化为null

要实现这个效果,只需要在创建JSON Writer的时候,添加if_sxml=>co_opt_initial_as_null这个选项,它会告诉序列化器把所有初始值字段转为JSON的null类型。

修改后的示例代码:

TYPES: BEGIN OF t_my_type, 
         foo TYPE string, 
         bar TYPE string, 
       END OF t_my_type.
DATA ls_structure TYPE t_my_type.
ls_structure-foo = 'some value'.
ASSERT ls_structure-bar IS INITIAL.

* 创建Writer时指定初始值转为null的选项
DATA(lo_json_writer) = cl_sxml_string_writer=>create( 
  type = if_sxml=>co_xt_json 
  options = VALUE #( ( if_sxml=>co_opt_initial_as_null ) )
).
CALL TRANSFORMATION id SOURCE result = ls_structure RESULT XML lo_json_writer.
DATA(lv_json_xstring) = lo_json_writer->get_output( ).
WRITE cl_abap_codepage=>convert_from( source = lv_json_xstring ).

运行这段代码后,输出结果就是你想要的:

{ "RESULT": { "FOO": "some value", "BAR": null } }

方案2:忽略初始字段不序列化

如果想直接跳过所有初始值字段,不把它们写入JSON,就需要使用if_sxml=>co_opt_omit_initial选项,同样在创建Writer时配置即可。

对应的示例代码:

TYPES: BEGIN OF t_my_type, 
         foo TYPE string, 
         bar TYPE string, 
       END OF t_my_type.
DATA ls_structure TYPE t_my_type.
ls_structure-foo = 'some value'.
ASSERT ls_structure-bar IS INITIAL.

* 创建Writer时指定忽略初始值的选项
DATA(lo_json_writer) = cl_sxml_string_writer=>create( 
  type = if_sxml=>co_xt_json 
  options = VALUE #( ( if_sxml=>co_opt_omit_initial ) )
).
CALL TRANSFORMATION id SOURCE result = ls_structure RESULT XML lo_json_writer.
DATA(lv_json_xstring) = lo_json_writer->get_output( ).
WRITE cl_abap_codepage=>convert_from( source = lv_json_xstring ).

这段代码的输出结果会自动去掉初始值的BAR字段:

{ "RESULT": { "FOO": "some value" } }

补充说明

这两个选项都是SAP SXML库提供的标准配置,适用于基于sxml的JSON序列化(CALL TRANSFORMATION id默认使用这个库处理JSON转换)。需要注意的是,这些选项从SAP NetWeaver 7.40 SP05版本开始支持,如果你的系统版本较旧,可能需要考虑升级系统,或者通过自定义XSLT转换来实现类似效果。

内容的提问来源于stack exchange,提问作者koks der drache

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:23:03