2012-06-26 24 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;代碼似乎能夠處理這一切。