API zum Anpassen der JSON-Ausgabe
Der Rückgabewert von json() unterstützt mehrere Methoden, um die generierte Ausgabe anzupassen. Methoden können in beliebiger Reihenfolge verkettet und kombiniert werden.
Einstiegspunkte in die API sind:
set
Das Ersetzen oder Hinzufügen von Schlüsseln in einem JSON-Objekt ist durch den Aufruf von
json(...).set(key, value)
möglich.
Beispiel 1:
$CMS_VALUE(json({"example": "value"}).set("additional_key", "additional_value"))$
Ergebnis:
{"additional_key":"additional_value","example":"value"}
Beispiel 2:
$CMS_VALUE(json({"example": "value"}).set("a", "A").set("a", "B"))$
Ergebnis:
{"a":"B","example":"value"}
Auch wenn die JSON-Spezifikation doppelte Einträge in einem JSON-Objekt (zwei Einträge mit gleichem Schlüssel) erlaubt, unterstützt die FirstSpirit-JSON-Lösung dies nicht. Das Hinzufügen eines Eintrags mit einem vorhandenen Schlüssel ersetzt also den vorherigen Eintrag.
get
Mit .get() kann auf die Werte der Felder eines JSON-Objekts zugegriffen werden. Hier ist ein komplexeres Beispiel:
1) Die JSON-Darstellung eines Abschnitts in der Variable jsonObject speichern:
$CMS_SET(jsonObject, json(#this))$
2) Dem data-Feld von jsonObject einen neuen (String)-Wert hinzufügen:
$CMS_SET(void, jsonObject.get("formData").set("anotherString","anotherValue"))$
3) Ausgabe des geänderten JSON-Objekts:
$CMS_VALUE(jsonObject)$
Ergebnis:
{
"fsType": "Section",
"name": "filter",
"identifier": "filter",
"formData": {
"anotherString": "anotherValue",
[...]
}
}
Die gleiche Modifikation kann mit den folgenden zwei Zeilen Vorlagencode erreicht werden:
$CMS_SET(set_data, json(#this).get("formData").set("anotherString","anotherValue"))$
$CMS_VALUE(json(#this).set("formData",set_data))$
removeKey
Mit der Funktion removeKey kann ein Schlüssel aus einem JSON-Objekt entfernt werden.
Beispiel 1:
$CMS_VALUE(json({"example": "value"}))$
Ergebnis:
{"example":"value"}
Beispiel 2:
$CMS_VALUE(json({"example": "value"}).removeKey("example"))$
Ergebnis:
{}
mapKeys
Die Funktion mapKeys kann verwendet werden, um Schlüsselnamen zu ändern.
Beispiel 1:
$CMS_SET(example, {"example": "value", "recursion": {"example2": "value2"}})$
$CMS_VALUE(json(example).mapKeys(key -> key.toUpperCase))$
Ergebnis:
{"EXAMPLE":"value","RECURSION":{"EXAMPLE2":"value2"}}
Beispiel 2:
$CMS_VALUE(json(example).mapKeys(key -> if(key.startsWith("ex"), "s" + key.substring(2), key)))$
Ergebnis:
{"recursion":{"sample2":"value2"},"sample":"value"}
Diese Beispiele erzeugen lediglich modifizierte Ausgaben und ändern nicht das Beispielobjekt selbst.
Das Beispiel kann aber auch mit dieser modifizierten Ausgabe überschrieben werden:
$CMS_SET(example,json(example).mapKeys(key -> key.toUpperCase))$
filter
Die Filterfunktion kann verwendet werden, um JSON-Objekteinträge nach einem Prädikat zu filtern.
Beispiel 1:
$CMS_SET(example, {"example": "value", "recursion": {"example2": "value2"})$
$CMS_VALUE(json(example))$
Ergebnis:
{ "example": "value","recursion":{"example2":"value2"}}
Beispiel 2:
$CMS_VALUE(json(example).filter(entry -> ! entry.key.startsWith("ex")))$
Ergebnis:
{"recursion":{}}
Beispiel 3:
$CMS_SET(example2, {"example3": null, "recursion2": { "example4": null }})$
$CMS_VALUE(json(example2))$
Ergebnis:
{"example3":null,"recursion":{"example4":null}}
Beispiel 4:
$CMS_VALUE(json(example2).filter(entry -> entry.value != null))$
Ergebnis:
{"recursion2":{}}