Wenn Sie JSON-Dokumente mit MySQL verwenden, können Sie JSON_ARRAY_APPEND()
verwenden Funktion zum Anhängen neuer Werte an ein Array.
So funktioniert es:Sie geben das JSON-Dokument als erstes Argument an, gefolgt von dem Pfad zum Anhängen, gefolgt von dem anzuhängenden Wert.
In MySQL 5.7 hieß diese Funktion JSON_APPEND()
aber dieser Name wird nicht mehr unterstützt.
Syntax
Die Syntax lautet wie folgt:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
Wo:
json_doc
ist das JSON-Dokument.path
ist der Pfad des Elements, an das der neue Wert angehängt werden soll.val
ist der neue Wert, der angehängt wird.
Die Pfad-Wert-Paare werden von links nach rechts ausgewertet. Das durch die Bewertung eines Paares erstellte Dokument wird zum neuen Wert, anhand dessen das nächste Paar bewertet wird.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein Beispiel zur Veranschaulichung.
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4) AS 'Ergebnis';
Ergebnis:
+--------------+| Ergebnis |+--------------+| [1, 2, 3, 4] |+--------------+
Also wird das 3. Argument an das Array angehängt. In diesem Fall verwende ich $
für den Weg. Dies ist ein Synonym für das JSON-Dokument, daher wird der Wert an das Array der obersten Ebene angehängt (das in diesem Fall zufällig das einzige Array ist).
Beispiel 2 – Verschachteltes Array
Hier ist ein Beispiel für das Anhängen eines Werts an ein Array, das in einem anderen Array verschachtelt ist.
SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Ergebnis';
Ergebnis:
+-------------------+| Ergebnis |+-------------------------------+| [1, 2, [3, 4, 5]] |+-------------------+
Hier verwende ich also $[2]
als Weg. Dies gibt das Array beim dritten Element an (Arrays verwenden eine nullbasierte Nummerierung, daher beginnt die Zählung bei Null).
Wenn an diesem Element noch kein Array vorhanden war, wird ein neues Array erstellt.
So:
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Ergebnis';
Ergebnis:
+----------------+| Ergebnis |+----------------+| [1, 2, [3, 4]] |+----------------+
Beispiel 3 – Ein größeres JSON-Dokument
Dieses Beispiel verwendet ein (etwas) größeres JSON-Dokument. Dies zeigt, wie sich der Pfad ändert, je nachdem, wo sich das Array innerhalb des Dokuments befindet.
SET @data ='{ "Person":{ "Name":"Homer", "Hobbies":["Essen", "Schlafen"] } }';SELECT JSON_ARRAY_APPEND(@data, '$.Person. Hobbys', "Base Jumping") AS 'Ergebnis';
Ergebnis:
Und genau wie im vorherigen Beispiel können wir bei Bedarf auch ein neues, verschachteltes Array erstellen:
SET @data ='{ "Person":{ "Name":"Homer", "Hobbies":["Essen", "Schlafen"] } }';SELECT JSON_ARRAY_APPEND(@data, '$.Person. Hobbys[0]', "Trinken") AS 'Ergebnis';
Ergebnis: