Mam anonimową tablicę, którą chcę deserializować. Tutaj przykład, wszystkie obiekty są takie same, ja tylko sformowałem pierwszy.Jak deserializować anonimową tablicę JSON w 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"}
]
Próbowałem deserializacji za pomocą CL_TREX_JSON_SERIALIZER ale że sprawa jest uszkodzony i nie działa z moim JSON (look at this question)
Potem próbowałem /UI2/CL_JSON. To coś potrzebuje "struktury", która idealnie pasuje do Obiektu podanego przez Obiekt JSON. "Struktura" oznacza w moim przypadku wewnętrzną tabelę obiektów z atrybutami time, date, timestamp, level, message
i details
. Wystąpił problem: ta klasa nie obsługuje poprawnie reffrences: używa opisu klas do opisu pola przypisanego do fieldymbola. Ponieważ nie mogę mieć listy obiektów, a jedynie listę reffrencji do obiektów, co zwykle nie stanowi problemu. To rozwiązanie nie działa.
W trzeciej próbie próbowałem z CALL TRANSFORMATION
jak opisał Horst Keller, ale z tej metody nie byłem w stanie czytać w annonymous tablicy. (Jagger skomentował lepszy link do tej ABAP 2 JSON and JSON 2 ABAP with ST)
Moje główne punkty:
- nie chcę zmienić JSON, ponieważ to, co dostaję od
sap.ui.log
- I preferują używać wbudowana funkcjonalność, a nie thirdparty ramach
Czy próbowałeś [to] (https://scn.sap.com/community/abap/blog/2013/04/15/abap-2-json-and-json-2-abap-with-st) ? – Jagger
@Jagger Tak, bazuje on na 'Transformacji wywołania', która wymaga (przez składnię' TRANSFORMACJA WYWOŁANIA demo_st_json_table ŹRÓDŁO XML json WYNIK '**' carrier = result.' **) nazwany węzeł główny (w tym przypadku 'operatorzy') Nie mam w mojej annonimowej tablicy. – inetphantom
Czy zmiana json "w locie" jest do przyjęcia? Przeczytałbym ten json na sznurku (zakładając, że zawsze jest taki mały), a następnie przykleiłem "anonimowy": {'na początku i'} 'na końcu. Następnie spróbuj użyć "WYWOŁUJ CALL TRANSFORMATION", aby uzyskać wszystko, czego potrzebujesz, i jeśli to konieczne, usuń te sklejone części na wyjściu. – Jagger