udo_woitek
I'm new here

Map.toJSON sortiert Ausgabe nach Map-Keys?

Jump to solution

Hallo,

ist die folgende Beobachtung korrekt? Und wenn ja, gibt es eine Möglichkeit, den Effekt zu unterbinden?

Code in der Seitenvorlage:

$CMS_SET(theMap, {:})$
$CMS_SET(void, theMap.put("id", "17"))$
$CMS_SET(void, theMap.put("words", "9"))$
$CMS_SET(void, theMap.put("content", "The quick brown fox jumps over the lazy dog."))$

$CMS_VALUE(theMap.toJSON)$

Ergebnis:

{
  "content": "The quick brown fox jumps over the lazy dog.",
  "id": "17",
  "words": "9"
}

Offenbar wird beim Aufruf von toJSON die Map nach deren Keys sortiert, was in meinem Fall unerwünscht ist. Gibt es eine Möglichkeit, diese Sortierung zu unterbinden? Die JSON-Ausgabe, die wir benötigen, muss einer vorgegebenen Reihenfolge der Einträge genügen. Insbesondere muss der id-Knoten der erste in der JSON-Ausgabe sein.

Viele Grüße,

Udo Woitek.

1 Solution

Accepted Solutions

Hallo Udo,

aus dem {:} wirst Du nicht einfach einen anderen Typ machen können. Du kannst Dir allerdings selber eine LinkedHashMap bauen:

$CMS_SET(theMap, class("java.util.LinkedHashMap").new)$

$CMS_SET(void, theMap.put("id", "17"))$

$CMS_SET(void, theMap.put("words", "9"))$

$CMS_SET(void, theMap.put("content", "The quick brown fox jumps over the lazy dog."))$

$CMS_VALUE(theMap.toJSON())$

Zum Erzeugen neuer Objekte siehe auch hier (Tipp: trotzdem möglichst sparsam verwenden).

Viele Grüße

Michael

View solution in original post

2 Replies
udo_woitek
I'm new here

Im Thread Eine mit $CMS_SET()$ erzeugte Map sortiert die Einträge habe ich die Aussage gefunden, eine Map würde die Reihenfolge der Einträge nicht beibehalten. Nun mag das bei einer HashMap der Fall sein, eine LinkedHashMap bewahrt aber auch in Java 8 die Reihenfolge der Einträge. Die Frage ist nun eher, wie man FirstSpirit davon überzeugen kann, aus {:} eine LinkedHashMap zu machen...

0 Kudos

Hallo Udo,

aus dem {:} wirst Du nicht einfach einen anderen Typ machen können. Du kannst Dir allerdings selber eine LinkedHashMap bauen:

$CMS_SET(theMap, class("java.util.LinkedHashMap").new)$

$CMS_SET(void, theMap.put("id", "17"))$

$CMS_SET(void, theMap.put("words", "9"))$

$CMS_SET(void, theMap.put("content", "The quick brown fox jumps over the lazy dog."))$

$CMS_VALUE(theMap.toJSON())$

Zum Erzeugen neuer Objekte siehe auch hier (Tipp: trotzdem möglichst sparsam verwenden).

Viele Grüße

Michael