2012-06-26 22 views
1

如果我想为已经不存在的语言开发串行器(例如ABAP),那么可能涉及哪些努力?它是否涉及仅仅编写ABAP序列化程序的“文本等价” - 我将如何处理复杂的对象。什么是最好的起点?编写JSON串行器

+0

请仔细看看json.org。确保你了解JSON是什么...而不是。 –

回答

2

更新: - 霍斯特·凯勒检查this blog与发布7.02和7.03/7.31(内核补丁116)开始,JSON在ABAP原生支持。

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

+0

您可能想要使用对json的本机支持来更新此答案。 – tomdemuyt

1

有一个类完全符合:CL_TREX_JSON_SERIALIZER。 它唯一没有的东西(SAP告诉我通过客户的消息,他们不会修复它,他们不支持这个代码)被放在双引号的属性。

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

一个例子的程序将是::

这很容易通过在CL_TREX_JSON_SERIALIZER-RECURSE加入线路52上固定

"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的克隆与beforementioned固定。此代码将返回:

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

我已经在包含表etcetera;代码似乎能够处理这一切。