Если я хочу разработать сериализатор для языка, для которого он еще не существует (например, ABAP), какими могут быть его усилия? Включает ли это просто написание «текстового эквивалента» серийного блока ABAP - как бы я решал сложные объекты. Какая была бы лучшая отправная точка для этого?Написание JSON-сериализатора
ответ
Обновление: Начиная с Релизы 7,02 и 7,03/7,31 (ядро патч 116), JSON поддерживается изначально в ABAP - проверить this blog Хорста Келлера.
Сначала вы должны искать ABAP и JSON с помощью сайта: sap.com, а затем выбрать один из существующих проектов, чтобы узнать и внести свой вклад. Однако, если вы все еще не используете бонусные очки NIH, убедитесь, что знаете, как использовать общие типы, полевые символы, RTTI и рекурсию наизнанку, а затем рекурсивно переходить к сложной структуре данных с помощью RTTI. Как только вы это сделаете, легко собрать любую выходную строку.
Возможно, вы захотите обновить этот ответ с помощью встроенной поддержки json. – tomdemuyt
Существует класс, который выполняет именно это: CL_TREX_JSON_SERIALIZER. Единственное, чего у него нет (и SAP сказал мне через сообщение клиента, что они не исправят его, они не поддерживают этот код) помещает атрибут в двойные кавычки.
Это легко исправить, добавив по линии 52 в CL_TREX_JSON_SERIALIZER-Recurse:
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 с beforementioned исправить. Этот код вернет:
{"type": "E", "code": "BC", "message": "Это будет сериализоваться правильно.", "Log_no": "", "log_msg_no": " 000000 "," message_v1 ":" "," message_v2 ":" "," message_v3 ":" "," message_v4 ":" "}
Я использовал этот код для структур, содержащих таблицы и т. Д .; код, похоже, способен справиться со всем этим.
В дополнение к ответу vwegert в проверить SAP to Json transforms
Всмотритесь в json.org. Убедитесь, что вы понимаете, что такое JSON ... и нет. –