У меня есть анонимный массив, который я хочу десериализовать. Здесь пример, все объекты одинаковы, я только сформировал первый.Как десериализировать анонимный массив JSON в abap?
[
{ "time":"08:55:54",
"date":"2016-05-27",
"timestamp":1464332154807,
"level":3,
"message":"registerResourcePath ('', '/sap/bc/ui5_ui5/ui2/ushell/resources/')",
"details":"","component":"sap.ui.ModuleSystem"},
{"time":"08:55:54","date":"2016-05-27","timestamp":1464332154808,"level":3,"message":"URL prefixes set to:","details":"","component":"sap.ui.ModuleSystem"},
{"time":"08:55:54","date":"2016-05-27","timestamp":1464332154808,"level":3,"message":" (default) : /sap/bc/ui5_ui5/ui2/ushell/resources/","details":"","component":"sap.ui.ModuleSystem"}
]
Я попытался десериализации с помощью CL_TREX_JSON_SERIALIZER но вещь повреждена и не работает с моей JSON (look at this question)
Затем я попытался /ui2/CL_JSON. Эта вещь нуждается в «структуре», которая идеально подходит для объекта, заданного объектом JSON. «Структура» означает в моем случае внутреннюю таблицу объектов с атрибутами time, date, timestamp, level, message
и details
. Возникла проблема: этот класс неправильно обрабатывает реферрации: он использует classdescription для описания поля, присвоенного знаку fields. Поскольку у меня не может быть списка объектов, но есть только список реферрантов для объектов, что обычно не представляет проблемы. Это решение не работает.
В третьей попытке я попытался с CALL TRANSFORMATION
, как описано Horst Keller, но с помощью этого метода я не смог прочитать в annonymous массиве. (Джаггер прокомментировал лучшую связь этого ABAP 2 JSON and JSON 2 ABAP with ST)
Моих главных пунктов:
- Я не хочу, чтобы изменить JSON, так это то, что я получаю от
sap.ui.log
- Я предпочитаю использовать встроенный в функциональности, а не третью сторону рамки
Вы пробовали [это] (https://scn.sap.com/community/abap/blog/2013/04/15/abap-2-json-and-json-2-abap-with-st) ? – Jagger
@Jagger Да, он основывается на 'Call transform', который нуждается (по синтаксису' CALL TRANSFORMATION demo_st_json_table SOURCE XML json RESULT' ** 'carrier = result.' **) именованный корневой узел (в данном случае' carrier') У меня нет моего анонимного массива. – inetphantom
Будет ли изменение json «на лету» приемлемым? Я бы прочитал этот json в строке (при условии, что он всегда такой маленький), а затем склеить «анонимный»: {'в начале и'} 'в конце. Затем попробуйте использовать 'CALL TRANSFORMATION' для всего, что вам нужно, и поместите эти склеенные части на выход, если это необходимо вообще. – Jagger