2016-05-31 22 views
6

Ho un array anonimo che voglio deserializzare. Qui l'esempio, tutti gli oggetti sono gli stessi, ho solo formulato il primo.Come deserializzare un array JSON anonimo in 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"} 
] 

ho cercato deserializzazione utilizzando CL_TREX_JSON_SERIALIZER ma che cosa è corrotto e non funziona con il mio JSON (look at this question)

Poi ho provato /UI2/CL_JSON. Questa cosa ha bisogno di una "struttura" che si adatti perfettamente all'oggetto dato dall'oggetto JSON. "Struttura" indica nel mio caso una tabella interna di oggetti con gli attributi time, date, timestamp, level, message e details. C'era il problema: questa classe non gestisce correttamente i reffrences: utilizza la descrizione della classe per descrivere il campo assegnato al fieldymbol. Dal momento che non posso avere un elenco di oggetti ma solo un elenco di reffrences per gli oggetti ciò che di solito non è un problema. Quella soluzione non funziona.

Come terzo tentativo ho provato con il CALL TRANSFORMATION come descritto da Horst Keller, ma questo metodo non è stato in grado di leggere in un array annonymous. (Jagger ha commentato una migliore link di questo ABAP 2 JSON and JSON 2 ABAP with ST)

I miei punti principali:

  • Io non voglio cambiare il JSON, perché è ciò che mi da sap.ui.log
  • io preferisco usare incorporato in termini di funzionalità e non un quadro di terze parti
+0

Hai provato [questo] (https://scn.sap.com/community/abap/blog/2013/04/15/abap-2-json-and-json-2-abap-with-st) ? – Jagger

+0

@Jagger Sì si basa sulla 'Trasformazione di chiamata' che ha bisogno (con la sintassi' CALL TRANSFORMATION demo_st_json_table SOURCE XML json RESULT' ** 'carriers = result' ** **) un nodo radice con nome (in questo caso' carriers') Non ho con il mio array anonimo. – inetphantom

+0

Sarebbe accettabile una modifica di "on the fly"? Vorrei leggere questo json in una stringa (supponendo che sia sempre così piccola) e quindi incollare "anonymous": {'all'inizio e'} 'alla fine. Quindi prova ad usare "CALL TRANSFORMATION" per qualsiasi cosa ti serva e spoglia le parti incollate nell'output se necessario. – Jagger

risposta

0

il vostro problema non viene fuori dalla anonimato di array, ma dal imbarazzo di serializzatore SAP JSON (De), che non rispetta le virgolette che racchiudono attributi JSON. Il problema è completamente descritto in this answer.
Se non si desidera modificare il proprio JSON al volo, l'unico modo è cambiare la classe like this.