【发布时间】:2012-06-28 06:49:31
【问题描述】:
如果我想为一种尚不存在的语言(例如 ABAP)开发序列化程序,那么需要付出哪些努力?它是否只涉及编写 ABAP 序列化程序的“文本等效” - 我将如何处理复杂的对象。最好的起点是什么?
【问题讨论】:
-
好好看看 json.org。确保您了解 JSON 是什么……什么不是。
标签: json web-services rest xml-serialization abap
如果我想为一种尚不存在的语言(例如 ABAP)开发序列化程序,那么需要付出哪些努力?它是否只涉及编写 ABAP 序列化程序的“文本等效” - 我将如何处理复杂的对象。最好的起点是什么?
【问题讨论】:
标签: json web-services rest xml-serialization abap
更新:从版本 7.02 和 7.03/7.31(内核补丁 116)开始,ABAP 原生支持 JSON - 请查看 Horst Keller 的 this blog。
您应该首先使用 site:sap.com 搜索 ABAP 和 JSON,然后选择一个现有项目来学习和贡献。但是,如果您仍然无法获得 NIH 奖励积分,请确保您知道如何使用泛型类型、字段符号、RTTI 和由内而外的递归,然后练习使用 RTTI 递归地遍历复杂数据结构。完成后,组装任何类型的输出字符串都很容易。
【讨论】:
有一个类可以做到这一点: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": "This will serialize correctly.",
"log_no": "", "log_msg_no": "000000", "message_v1": "", "message_v2": "",
"message_v3": "", "message_v4": ""}
我已在包含表格等的结构上使用此代码;代码似乎能够处理这一切。
【讨论】: