bianca_batsch
New Responder

toJSON mit geschachteltem Array

Jump to solution

Hallo zusammen,

ich habe folgende Anweisung (eingebettet in einem Aufbau für ein JSON mittels toJSON am Ende bei der Ausgabe, FS 5.2):

--$$CMS_SET(external_references_array, [])$$--

--$$CMS_IF(tt_use_external_reference)$$--

     --$$CMS_FOR(tt_external_reference_list_entry, tt_external_reference_list)$$--

          --$$CMS_SET(external_references_entry_array, [])$$--

          --$$CMS_SET(void, external_references_entry_array.add(tt_external_reference_list_entry.tt_channel_config_key))$$--

          --$$CMS_SET(void, external_references_entry_array.add(tt_external_reference_list_entry.tt_channel_config_value))$$--

          --$$CMS_SET(void, external_references_array.add(external_references_entry_array))$$--

     --$$CMS_END_FOR$$--

--$$CMS_END_IF$$--

--$$CMS_SET(void, channel_json.put("externalReferences", external_references_array))$$--

Ich erwarte eine Ausgabe in Form von

[

  [

    "channelConfig1",

    "/external/channel1.json"

  ],

  [

    "channelConfig2",

    "/external/odds_communication/channel2.png"

  ],

]

bekomme aber

[

  [

    "channelConfig1",

    "/external/channel1.json",

    "channelConfig2",

    "/external/odds_communication/channel2.png"

  ],

]

Habe ich einen Denkfehler in den Zuweisungen, oder kann toJSON das nicht handeln?

Viele Grüße,

Bianca

0 Kudos
1 Solution

Accepted Solutions
brueder
I'm new here

Hallo Bianca,

es gibt mehrere Dinge, die hier zuschlagen. Bevor ich auf die konkrete Lösung eingehe, möchte ich einen Vorschlag machen: Deine innere Liste sieht für mich so aus, als würde sie Dinge mit verschiedener Bedeutung enthalten. In diesen Fällen bietet es sich meist an, stattdessen eine Map/Json-Object zu verwenden und die verschiedenen Elemente zu benennen. Wenn du das tust, löst sich das Problem gleich von selbst auf und du erhälst in etwa eine solche Ausgabe:

[

  {

    "key": "channelConfig1",

    "value": "/external/channel1.json"

  },

  {

    "key": "channelConfig2",

    "value": "/external/odds_communication/channel2.png"

  },

]

Die "Lösung" für dein Problem ist eine etwas veränderte API beim Listenzugriff bei Verwendeung der BeanShell (die ja in FirstSpirit verwendet wird). Es existiert eine Überladung, die "add" für Listen auf das "addAll" umbiegt. Ein Quickfix, der die Listensortierung (temporär) umdreht, wäre

--$$CMS_SET(void, external_references_array.add(0, external_references_entry_array))$$--

In Kombination mit einmal Liste umdrehen

--$$CMS_SET(void, class("java.util.Collections").reverse(external_references_array))$$--

--$$CMS_SET(void, channel_json.put("externalReferences", external_references_array))$$--

Ich denke, dass der erste Ansatz empfehlenswert wäre. Perfekt ist der zweite auch nicht - aber er funktioniert. Wie man auf die Überladung der BeanShell verzichten kann, weiß ich an dieser Stelle leider auch nicht.

Viele Grüße,

Lena

View solution in original post

0 Kudos
4 Replies
brueder
I'm new here

Hallo Bianca,

es gibt mehrere Dinge, die hier zuschlagen. Bevor ich auf die konkrete Lösung eingehe, möchte ich einen Vorschlag machen: Deine innere Liste sieht für mich so aus, als würde sie Dinge mit verschiedener Bedeutung enthalten. In diesen Fällen bietet es sich meist an, stattdessen eine Map/Json-Object zu verwenden und die verschiedenen Elemente zu benennen. Wenn du das tust, löst sich das Problem gleich von selbst auf und du erhälst in etwa eine solche Ausgabe:

[

  {

    "key": "channelConfig1",

    "value": "/external/channel1.json"

  },

  {

    "key": "channelConfig2",

    "value": "/external/odds_communication/channel2.png"

  },

]

Die "Lösung" für dein Problem ist eine etwas veränderte API beim Listenzugriff bei Verwendeung der BeanShell (die ja in FirstSpirit verwendet wird). Es existiert eine Überladung, die "add" für Listen auf das "addAll" umbiegt. Ein Quickfix, der die Listensortierung (temporär) umdreht, wäre

--$$CMS_SET(void, external_references_array.add(0, external_references_entry_array))$$--

In Kombination mit einmal Liste umdrehen

--$$CMS_SET(void, class("java.util.Collections").reverse(external_references_array))$$--

--$$CMS_SET(void, channel_json.put("externalReferences", external_references_array))$$--

Ich denke, dass der erste Ansatz empfehlenswert wäre. Perfekt ist der zweite auch nicht - aber er funktioniert. Wie man auf die Überladung der BeanShell verzichten kann, weiß ich an dieser Stelle leider auch nicht.

Viele Grüße,

Lena

0 Kudos

Hi Lena,

vielen Dank für Deine Antwort. Ich hatte die Schnittstelle so bekommen und versucht mich anzupassen. Wir haben tatsächlich die Schnittstelle nochmal geändert, dass es für uns passte und auch mit FS hinhaut - soweit wir das umsetzen konnten.

Viele Grüße,

Bianca

0 Kudos

wie sieht denn eure jetzige Lösung aus?

0 Kudos

Hallo,

wie schon oben ewähnt, hatte sich die Schnittstelle nochmals geändert und so konnte ich das JSON ganz "normal" bauen.

In einem anderem Template haben wir aber tasächlich das Umdrehen der Liste nutzen müssen, wie Lena es erwähnte.

LG Bianca

0 Kudos