Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JSON_REMOVE() – Entfernen Sie Daten aus einem JSON-Dokument in MySQL

In MySQL der JSON_REMOVE() Funktion entfernt Daten aus einem JSON-Dokument und gibt das Ergebnis zurück.

Sie geben das JSON-Dokument als erstes Argument an, gefolgt vom Pfad, aus dem Daten entfernt werden sollen. Sie können bei Bedarf mehrere Pfade angeben.

Syntax

Die Syntax lautet wie folgt:

JSON_REMOVE(json_doc, Pfad[, Pfad] ...)

Wobei json_doc ist das JSON-Dokument und path ist der Pfad, aus dem Daten entfernt werden sollen.

Der path Argumente werden von links nach rechts ausgewertet. Das durch die Auswertung eines Pfads erstellte Dokument wird zum neuen Wert, anhand dessen der nächste Pfad ausgewertet wird.

Das erste Argument muss ein gültiges JSON-Dokument sein, andernfalls tritt ein Fehler auf.

Auch der path Das Argument muss ein gültiger Pfadausdruck sein und darf nicht $ sein oder enthält einen * oder ** Platzhalter, sonst tritt ein Fehler auf.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein Beispiel zur Veranschaulichung.

SELECT JSON_REMOVE('{"a":1, "b":2, "c":3}', '$.b') AS 'Ergebnis';

Ergebnis:

+------------------+| Ergebnis |+------------------+| {"a":1, "c":3} |+-----------------+

In diesem Fall haben wir das Schlüssel/Wert-Paar mit dem Schlüssel von b entfernt . Das liegt daran, dass wir $.b angegeben haben als zweites Argument.

Hier ist ein weiteres Beispiel:

SELECT JSON_REMOVE('{"Name":"Homer", "Gender":"Männlich", "Alter":39}', '$.Age') AS 'Ergebnis';

Ergebnis:

+-------------------------------------+| Ergebnis |+-------------------------------------+| {"Name":"Homer", "Geschlecht":"Männlich"} |+------------------------------- ------+

Beispiel 2 – Nicht vorhandener Pfad

Wenn Sie einen nicht vorhandenen Pfad angeben, wird nichts entfernt. Das ursprüngliche JSON-Dokument wird unverändert zurückgegeben.

SELECT JSON_REMOVE('{"Name":"Homer", "Alter":39}', '$.Gender') AS 'Ergebnis';

Ergebnis:

+------------------------------+| Ergebnis |+------------------------------+| {"Alter":39, "Name":"Homer"} |+------------------------------+ 

Beispiel 3 – Arrays

Hier ist ein Beispiel mit einem Array.

SELECT JSON_REMOVE('[1, 2, 3]', '$[0]') AS 'Ergebnis';

Ergebnis:

+--------+| Ergebnis |+--------+| [2, 3] |+--------+

Arrays verwenden eine nullbasierte Nummerierung, daher wird in diesem Fall das erste Element aus dem Array entfernt.

Hier ist ein weiteres Array-Beispiel. Dieses Mal entfernen wir einen Wert aus einem verschachtelten Array.

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Ergebnis';

Ergebnis:

+----------------+| Ergebnis |+----------------+| [1, 2, [3, 5]] |+----------------+

Beispiel 4 – Mehrere Pfade

Sie können mehr als einen Pfad angeben, um Daten von mehreren Stellen im JSON-Dokument zu entfernen.

Einfaches Beispiel:

SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Ergebnis';

Ergebnis:

+-----------+| Ergebnis |+-----------+| [1, 3, 4] |+-----------+

Wie bereits erwähnt, der path Die Argumente werden von links nach rechts ausgewertet, und das durch die Auswertung eines Pfads erzeugte Dokument wird zum neuen Wert, anhand dessen der nächste Pfad ausgewertet wird.

Daher entfernt das 2. Pfadargument in diesem Beispiel einen anderen Wert als der, der entfernt worden wäre, wenn es das einzige Pfadargument gewesen wäre. Wenn es das einzige Pfadargument gewesen wäre, hätte es 4 entfernt .

Folgendes meine ich:

SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') AS 'Ein Pfad', JSON_REMOVE('[1, 2, 3, 4, 5]', ' $[1]', '$[3]') AS 'Zwei Pfade';

Ergebnis:

+--------------+-----------+| Ein Weg | Zwei Pfade |+--------------+-----------+| [1, 2, 3, 5] | [1, 3, 4] |+--------------+-----------+

Sie können das also sehen, wenn wir $[3] verwenden als einziger Pfad wird 4 entfernt aus dem Array. Aber wenn wir es als zweiten Pfad verwenden, wird 5 entfernt (und 4 bleibt unberührt).

Ein weiteres Beispiel, diesmal das Löschen von Werten aus einem Array und einem verschachtelten Array:

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') AS 'Ergebnis';

Ergebnis:

+-------------+| Ergebnis |+-------------+| [2, [3, 5]] |+------------+

Also noch einmal, obwohl das Array an Position 2 ist im Originaldokument der erste Pfadwert ($[0] ) schneidet das äußere Array herunter und das innere Array wechselt auf die Position 1 .

Wenn Ihnen das den Kopf verdreht, können Sie die Pfadargumente jederzeit vertauschen, sodass die Werte ganz rechts zuerst entfernt werden. Auf diese Weise wirkt sich dies nicht auf die Position der Werte ganz links aus und Sie können die Pfade daher basierend auf dem ursprünglichen JSON-Dokument angeben.

Wir können also den vorherigen Code wie folgt ändern und erhalten das gleiche Ergebnis:

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') AS 'Ergebnis';

Ergebnis:

+-------------+| Ergebnis |+-------------+| [2, [3, 5]] |+------------+

Beispiel 5 – Ein größeres JSON-Dokument

Hier ist ein Beispiel mit einem (etwas) größeren JSON-Dokument.

SET @data ='{ "Person":{ "Name":"Homer", "Alter":39, "Hobbies":["Essen", "Schlafen", "Base Jumping"] } }'; SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') AS 'Result';

Ergebnis:

+---------------------------------------------- --------------------+| Ergebnis |+------------------------------------------------------------ -------------------+| {"Person":{"Name":"Homer", "Hobbies":["Essen", "Schlafen"]}} |+------------------ ----------------------------------+