如果我想为已经不存在的语言(例如ABAP)开发一个序列化器,那么它可能涉及哪些工作?它是否只涉及编写ABAP序列化器的“文本等效” - 我将如何处理复杂的对象。什么是最好的起点呢?
答案 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)
除了vwegert的回复,请查看SAP to Json transforms