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

JSON_REPLACE() – Ersetzen Sie Werte in einem JSON-Dokument in MySQL

In MySQL der JSON_REPLACE() Funktion ersetzt Werte in einem JSON-Dokument und gibt das Ergebnis zurück.

Sie geben das JSON-Dokument als erstes Argument an, gefolgt vom Pfad zum Ersetzen der Daten, gefolgt vom Wert, durch den der vorhandene Wert ersetzt werden soll.

Bei Bedarf können Sie Daten an mehreren Stellen im Dokument ersetzen. Geben Sie dazu einfach nach Bedarf mehrere Pfad/Wert-Paare an.

Syntax

Die Syntax lautet wie folgt:

JSON_REPLACE(json_doc, path, val[, path, val] ...)

Wobei json_doc ist das JSON-Dokument, path ist der Pfad zum Ersetzen der Daten und val ist der neue Wert, der den vorhandenen Wert ersetzt.

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.

Wenn das Pfad/Wert-Paar nicht im JSON-Dokument vorhanden ist, wird es ignoriert und hat keine Auswirkung.

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 kein * enthalten oder ** Platzhalter, sonst tritt ein Fehler auf.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein Beispiel zur Veranschaulichung.

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

Ergebnis:

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

In diesem Fall haben wir b ersetzt ’s Wert mit 9 . Das liegt daran, dass wir $.b angegeben haben als zweites Argument und 9 als drittes.

Hier ist ein weiteres Beispiel:

SELECT JSON_REPLACE('{"Name":"Bart", "Age":10}', '$.Name', 'Nelson - Ha Ha!') AS 'Ergebnis';

Ergebnis:

+----------------------------------------+| Ergebnis |+----------------------------------------+| {"Alter":10, "Name":"Nelson - Ha Ha!"} |+------------------------ -----------+

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_REPLACE('{"Name":"Homer", "Alter":39}', '$.Gender', 'Male') AS 'Ergebnis';

Ergebnis:

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

Beispiel 3 – Arrays

Hier ist ein Beispiel mit einem Array.

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

Ergebnis:

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

Arrays verwenden eine nullbasierte Nummerierung, daher wird in diesem Fall das erste Element ersetzt.

Hier ist ein weiteres Array-Beispiel. Dieses Mal ersetzen wir einen Wert in einem verschachtelten Array.

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

Ergebnis:

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

Beispiel 4 – Mehrere Pfade

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

Einfaches Beispiel:

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

Ergebnis:

+------------------+| Ergebnis |+------------------+| [1, 9, 3, 22, 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"] } }';SELECT JSON_REPLACE(@data , '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') AS 'Result';

Ergebnis:

+---------------------------------------------- ---------------------------------+| Ergebnis |+------------------------------------------------------------ ---------------------------------+| {"Person":{"Alter":10, "Name":"Bart", "Hobbies":["Essen", "Base Jumping"]}} |+------------ -------------------------------------------------- ------------------+