Questions & Answers

SOLVED
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

Type a product name