Map.toJSON sortiert Ausgabe nach Map-Keys?
Author: udo_woitek
Publication Date: 9/14/2018 13:47
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.
Tags: CMS, vorlagen
-
Author: udo_woitek - 9/14/2018 15:29
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 -
Author: mbergmann - 9/17/2018 11:04
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
0
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.
Kommentare
2 Kommentare