【问题标题】:Writing JSON serializer编写 JSON 序列化器
【发布时间】:2012-06-28 06:49:31
【问题描述】:

如果我想为一种尚不存在的语言(例如 ABAP)开发序列化程序,那么需要付出哪些努力?它是否只涉及编写 ABAP 序列化程序的“文本等效” - 我将如何处理复杂的对象。最好的起点是什么?

【问题讨论】:

  • 好好看看 json.org。确保您了解 JSON 是什么……什么不是。

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


【解决方案1】:

更新:从版本 7.02 和 7.03/7.31(内核补丁 116)开始,ABAP 原生支持 JSON - 请查看 Horst Keller 的 this blog

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

【讨论】:

  • 您可能希望使用对 json 的本机支持来更新此答案。
【解决方案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": "This will serialize correctly.", 
"log_no": "", "log_msg_no": "000000", "message_v1": "", "message_v2": "", 
"message_v3": "", "message_v4": ""}

我已在包含表格等的结构上使用此代码;代码似乎能够处理这一切。

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多