编写JSON序列化程序

时间:2012-06-26 21:15:06

标签: json web-services rest xml-serialization abap

如果我想为已经不存在的语言(例如ABAP)开发一个序列化器,那么它可能涉及哪些工作?它是否只涉及编写ABAP序列化器的“文本等效” - 我将如何处理复杂的对象。什么是最好的起点呢?

3 个答案:

答案 0 :(得分:2)

更新:从版本7.02和7.03 / 7.31(内核补丁116)开始,ABAP本身支持JSON - 由Horst Keller检查this blog

您应首先使用site:sap.com搜索ABAP和JSON,然后选择一个现有项目来学习和贡献。但是,如果你还在寻找NIH奖励积分,请确保你知道如何使用泛型类型,字段符号,RTTI和递归,然后使用RTTI递归地练习复杂的数据结构。完成后,组装任何类型的输出字符串都很容易。

答案 1 :(得分:2)

有一个类正是这样做的:CL_TREX_JSON_SERIALIZER。 唯一没有的(和SAP通过客户消息告诉我,他们不会修复它,他们不支持这段代码)将属性放在双引号中。

通过在CL_TREX_JSON_SERIALIZER-RECURSE中添加第52行可以轻松解决这个问题:

CONCATENATE '"' <abapcomp>-name '"' c_colon INTO l_value .

示例程序将是:

"We are going to serialize an error
DATA: wa_error TYPE bapireturn.
"Reference to the serializer
DATA: cl_serializer TYPE REF TO zcl_trex_json_serializer.
"Final output
DATA: l_json_string TYPE string.

wa_error-type = 'E'.
wa_error-code = 'BC'  .
wa_error-message = 'This will serialize correctly.'.

CREATE OBJECT cl_serializer
  EXPORTING
    DATA = wa_error.

cl_serializer->serialize( ) .
l_json_string = cl_serializer->get_data( ) .
WRITE l_json_string.

我使用zcl_trex_json_serializer,它是cl_trex_json_serializer的克隆,带有上述修复。此代码将返回:

{“type”:“E”,“code”:“BC”,“message”:“这将正确序列化。”,“log_no”:“”,“log_msg_no”:“000000”,“message_v1” :“”,“message_v2”:“”,“message_v3”:“”,“message_v4”:“”}

我在包含表格等的结构上使用了此代码;代码似乎能够处理所有这些。

答案 2 :(得分:-1)

除了v​​wegert的回复,请查看SAP to Json transforms