Questions & Answers

SOLVED
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

Type a product name