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":{}}
