まだ存在しない言語 (ABAP など) 用のシリアライザーを開発したい場合、どのような作業が必要になるでしょうか? ABAPシリアライザーの「同等のテキスト」を書くだけですか?複雑なオブジェクトにどのように取り組むのでしょうか。このための最良の出発点は何ですか?
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.
cl_trex_json_serializerのクローンであるzcl_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": ""}
このコードは、テーブルなどを含む構造体で使用しました。コードはそれをすべて処理できるようです。
更新:リリース 7.02 および 7.03/7.31 (カーネル パッチ 116) 以降、JSON は ABAP でネイティブにサポートされています - Horst Keller によるこのブログを確認してください。
最初に site:sap.com を使用して ABAP と JSON を検索し、既存のプロジェクトの 1 つを選択して学習し、貢献する必要があります。ただし、まだ NIH のボーナス ポイントが得られない場合は、ジェネリック型、フィールド シンボル、RTTI、および再帰の使用方法を理解していることを確認してから、RTTI を使用して複雑なデータ構造を再帰的にウォークする練習をしてください。これが完了すると、あらゆる種類の出力文字列を簡単に組み立てることができます。