JSON-String aus interner Tabelle erstellen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

JSON-String aus interner Tabelle erstellen

Beitrag von DeathAndPain (Top Expert / 1490 / 165 / 335 ) »
Hallo zusammen,

ich nutze die Methode /UI2/CL_JSON=>SERIALIZE, um aus einer Struktur ein JSON zu machen. Im Grundsatz funktioniert das sehr gut, auch unter Berücksichtigung von Untertabellen und geschachtelten Strukturen. Nur habe ich jetzt das Problem, dass eine Untertabelle unterschiedliche Datentypen pro Zeile übergeben soll. In JSON ist sowas problemlos abbildbar, aber eine interne ABAP-Tabelle kann nicht in einer Zeile einen anderen Datentyp für eine Spalte haben als in einer anderen.

Konkret will ich ein JSON erzeugen, das so aussieht:

{"custom_fields":[{"id":2133178,"value":"50048910"},{"id":2133245,"value":{"unit":"EUR","value":"1000.00"}}]}

Menschenlesbar dargestellt:

Code: Alles auswählen.

object {Struktur mit einer Spalte}
  -custom_fields [Tabelle mit 2 Zeilen]
    - 0 {Struktur mit zwei Spalten}
      id: 2133178
      value: 50048910
    - 1 {Struktur mit zwei Spalten}
      id: 2133245
      value {Struktur mit zwei Spalten}
        -unit: EUR
        -value: 1000.00
In JSON ist sowas komplett legitim. Man kann aber in ABAP keine interne Tabelle dergestalt aufbauen, dass value in der einen Zeile ein einfacher Zahlenwert und in einer anderen eine zweispaltige Unterstruktur ist.

Gibt es einen Weg, sowas dennoch mit dieser Klasse zu realisieren? Oder gibt es einen anderen Weg, solch JSON mit überschaubarem Aufwand (!) in ABAP aufzubauen?

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
tm987456



Re: JSON-String aus interner Tabelle erstellen

Beitrag von black_adept (Top Expert / 3462 / 68 / 681 ) »
Wenn JSON eine andere Definition hat wie eine Tabelle strukturiert sein kann als SAP ist das leider wie mit den Äpfeln und Birnen.
Eventuell kann die o.a. Methode mit Referenzvariablen umgehen - dann könnte es gehen. Aber ich habe da so meine Zweifel.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
DeathAndPain

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: JSON-String aus interner Tabelle erstellen

Beitrag von DeathAndPain (Top Expert / 1490 / 165 / 335 ) »
Ich habe mir jetzt damit beholfen, je ein JSON pro Datentyp über die Klasse zu erzeugen und dann mit vergleichsweise primitiven Stringoperationen den Inhalt der JSONs zu einem großen JSON-String zusammenzusetzen. Klappt recht gut, da vieles an meinem JSON auch statisch und daher hart in Code gießbar ist. Insofern ist meine Kuh erst mal vom Eis. Interessieren würde es mich dennoch, ob es in ABAP Hilfsmittel gibt, mit denen man auf bequeme Weise auch solch ein JSON erzeugen kann.

Re: JSON-String aus interner Tabelle erstellen

Beitrag von a-dead-trousers (Top Expert / 3590 / 124 / 933 ) »
Wie Stefan schon gemeint hat, würde ich es mal mit TYPE [STANDARD] TABLE OF REF TO DATA versuchen. Damit ließe sich zumindest eine "unendliche" Datenhierachie in ABAP erzeugen, ob das aber Sinn macht 😕

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
DeathAndPain

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: JSON-String aus interner Tabelle erstellen

Beitrag von DeathAndPain (Top Expert / 1490 / 165 / 335 ) »
Ich denke mal, Sinn machen würde es im Sinne meiner Aufgabenstellung schon. Die Frage ist nur, ob die genannte Klasse brav den Referenzen folgt und das korrekt in das gewünschte JSON auflöst oder ob ich am Ende ein JSON bekomme, in dem lauter Datenreferenzen stehen.

Re: JSON-String aus interner Tabelle erstellen

Beitrag von A6272 (Specialist / 156 / 1 / 20 ) »
Hallo,

was macht die Methode /UI2/CL_JSON=>SERIALIZE mit

value {Struktur mit zwei Spalten}
-unit: EUR --> hier INITAL-Wert übergeben
-value: 1000.00

kommt dann im JSON noch "unit" an?

Re: JSON-String aus interner Tabelle erstellen

Beitrag von DeathAndPain (Top Expert / 1490 / 165 / 335 ) »
Jupp, Initialwerte werden auch berücksichtigt. Wäre auch schlimm wenn nicht, denn dann könnte man leere Strings nicht im JSON ausgeben (was je nach Anwendungsfall ja auch mal erforderlich sein kann).

Re: JSON-String aus interner Tabelle erstellen

Beitrag von A6272 (Specialist / 156 / 1 / 20 ) »
Die Methode SERIALIZE hat einen Parameter COMPRESS (Skip empty elements) TYPE BOOL DEFAULT C_BOOL-FALSE

value {Struktur mit zwei Spalten}
-unit: EUR --> hier INITAL-Wert übergeben
-value: 1000.00

kommt dann immer noch "unit" im JSON an?

Seite 1 von 1

Vergleichbare Themen

Löschen aus interner Tabelle
von Beginner014 » 21.11.2014 09:26
Problem mit interner Tabelle
von Troilus » 17.11.2007 23:09
Move-Corresponding mit interner Tabelle
von Dele » 13.10.2015 13:53
Key Felder von interner Tabelle auf dem ALV
von thesaint » 14.07.2005 16:32
.xls Datei aus interner Tabelle
von JanR » 05.10.2020 10:10