patrick_stoeckl
I'm new here

Frage zur Ausgabe einer verschachtelten Liste (JSON)

Hallo,

ich möchte gerne eine verschachtelte Liste ausgeben bzw. mir die einzelnen Werte als CMS-Variable schreiben. Bei der Ausgabe sitze ich jedoch im Moment auf dem Schlauch und habe keine Ahnung wie das am besten zu lösen ist. Ich möchte die Daten ausschließlich über die CMS-Funktionen auslesen, ist das überhaupt möglich?


Hier eine Beispielliste:

[{

        "DE": [

            {

                "S_ID": "8018",

                "System_Number_sys_desc": "Systemnummer 1",

                "System_Name_sys_desc": "Systemname1",

                "Short_Description_System_sys_desc": "Systembeschreibung 1",

                "Description_System_sys_desc": "Das ist die ausführliche Systembeschreibung 1.",

                "S_MainAssetID": "151186",

                "S_Images": "825"

            },  {

                "S_ID": "8019",

               "System_Number_sys_desc": "Systemnummer 2",

                "System_Name_sys_desc": "Systemname2",

                "Short_Description_System_sys_desc": "Systembeschreibung 2",

                "Description_System_sys_desc": "Das ist die ausführliche Systembeschreibung 2.",

                "S_MainAssetID": "151186",

                "S_Images": "825"

            }

        ],

        "EN": [

            {

                 "S_ID": "8018",

                "System_Number_sys_desc": "Systemnummer 1 EN",

                "System_Name_sys_desc": "Systemname1 EN",

                "Short_Description_System_sys_desc": "Systembeschreibung 1 EN",

                "Description_System_sys_desc": "Das ist die ausführliche Systembeschreibung 1 EN.",

                "S_MainAssetID": "151186",

                "S_Images": "825"

            }

        ]

    }]

Die Liste soll dann wenn möglich in einer FOR-Schleife ausgegeben werden.

Vielen Dank für die Hilfe.

Wichtige Anmerkung: Die obengenannte Logik liegt als STRING vor. Müsste als SortedMap ausgegeben werden - dann klappt es scheinbar auch mit der Ausgabe. Da die Daten aber dynamisch als String kommen muss das irgendwie zu einer SortedMap umgewandelt werden.

LG, Patrick

0 Kudos
5 Replies
mikula
Crownpeak employee

Hallo Patrick,

ich verstehe nicht so ganz was du genau tun möchtest.

1. Wo kommt der Json String her?
2. Hab ich das richtig verstanden, du hast nun dieses json und am ende soll eine Sorted List herausfallen und das möchtest du ausschließlich mit FS boardmitteln machen?

LG Martin

0 Kudos

Hallo Martin,

1.) der String kommt von einer angebundenen Datenbank und wird als cs_images ausgelesen. Wenn ich im FS den Typ Abfrage kommt bei mir "Java.String", hier sollte aber wenn möglich "SortedMap" herauskommen, denn dann habe ich es bereits geschafft mir die einzelnen Elemente ausgeben zu lassen.

Was mir bereits gelungen ist:

$CMS_SET(for_wrapper, {hier dann der String})$  -> gibt mir die SortedMap aus

$CMS_SET(for_wrapper, cs_images)$ oder $CMS_SET(for_wrapper)$$CMS_VALUE(cs_images)$$CMS_END_SET$  -> funktioniert die Ausgabe wieder nicht als FOR-Schleife.

2.) Ich möchte jedes einzelne Element als FS-Variable in einer FOR-Schleife ausgeben können.

Vielen Dank für die Hilfe

0 Kudos

Hallo Patrick,

das ist vielleicht nicht die erhoffte Antwort, aber bestimmte Datentypen in FS haben eine toJSON()-Methode:

http://www.e-spirit.com/odfs52/vorlagenentwick/vorlagensyntax/datentypen/entity/?query=*JSON*#s58

Wenn Du Dir allerdings dynamisch JSON-Objekte zusammenbauen möchtest, dann kommst Du irgendwann um Java-Programmierung in Form eines BeanShell-Scriptes oder einer Executable nicht herum. Ist auch eine Frage der Performance, komplexe Operationen würde ich nicht im Template-Code machen und allein wegen des erhöten Testaufwandes, das ist mit JUnit-Tests in Java besser und stabiler zu machen.

Grüße Marian

0 Kudos

Hallo Marian,

die Methode toJson() kommt nicht in Frage, denn hier würde man ja eine FS-List bzw. Map in ein JSON konvertieren.

Wir brauchen aber den umgekehrten Fall: von JSON-Syntax in FS-List bzw. Map. Dafür haben wir keine Funktion gefunden.

0 Kudos

Hallo Yvonne und Patrick,

für mich sieht das so aus als wäre euer Problem nicht ganz so trivial. Ihr wollt im Grunde ja euer json zu irgendwelchen Objekten zusammenbauen, die dann in einer Liste und damit iterierbar usw. sind. Sowas würde ich persönlich mit einer Library wie z.B. gson erledigen. Außer ihr seid motiviert einen eigenen Json parser mit FirstSpirit mitteln zu schreiben. Ich denke allerdings, dass welches Ergebnis dabei auch immer entsteht, dass dieses Ergebnis nicht besonders performant sein wird.

Der FirstSpirit-Weg wäre nun ein kleines Modul zu schreiben. Dieses Modul enthält benötigte Libraries und stellt ggf. auch einen Service bereit, welchem der String geliefert übergeben wird und gewünschte Liste zurückliefert.

0 Kudos