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 / 1795 / 213 / 396 ) »
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


gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: JSON-String aus interner Tabelle erstellen

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
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 / 1795 / 213 / 396 ) »
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 / 4271 / 213 / 1140 ) »
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.18
Basis: 7.50

Re: JSON-String aus interner Tabelle erstellen

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
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 / 231 / 6 / 36 ) »
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 / 1795 / 213 / 396 ) »
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 / 231 / 6 / 36 ) »
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

7
Antw.
1351
Views
.xls Datei aus interner Tabelle
von JanR » 05.10.2020 10:10 • Verfasst in ABAP® für Anfänger
10
Antw.
3379
Views
Select mit interner Tabelle
von Kenny » 13.11.2013 12:17 • Verfasst in ABAP® für Anfänger
5
Antw.
2679
Views
Prüfung interner Tabelle
von knut » 27.06.2005 14:44 • Verfasst in ABAP® Core
7
Antw.
4326
Views
Concatenate in interner Tabelle
von wenigerABAP » 16.09.2016 12:47 • Verfasst in ABAP® für Anfänger
6
Antw.
3715
Views
Key Felder von interner Tabelle auf dem ALV
von thesaint » 14.07.2005 16:32 • Verfasst in ABAP Objects®

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140