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

JSON_SET() – Einfügen oder Aktualisieren von Werten in einem JSON-Dokument in MySQL

In MySQL das JSON_SET() Die Funktion fügt Werte in ein JSON-Dokument ein oder aktualisiert sie und gibt das Ergebnis zurück.

Sie geben das JSON-Dokument als erstes Argument an, gefolgt vom einzufügenden Pfad und dem einzufügenden Wert. Sie können mehrere Pfad/Wert-Paare angeben, wenn Sie mehrere Werte aktualisieren müssen.

Syntax

Die Syntax lautet wie folgt:

JSON_SET(json_doc, Pfad, Wert[, Pfad, Wert] ...)

Wo:

  • json_doc ist das JSON-Dokument.
  • path ist der Pfad des Elements, für das Daten eingefügt oder der Wert aktualisiert werden soll.
  • val ist der neue Wert.

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.

Ein Fehler tritt auf, wenn das erste Argument kein gültiges JSON-Dokument ist oder wenn ein Pfadargument kein gültiger Pfadausdruck ist oder einen * enthält oder ** Platzhalter.

Beispiel 1 – Einen Wert einfügen

Hier ist ein Beispiel, um zu demonstrieren, wie man mit dieser Funktion einen Wert einfügt.

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

Ergebnis:

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

In diesem Fall wird das 3. Argument am angegebenen Pfad in das Array eingefügt. Ich verwende $.c für den Pfad und 3 für den einzufügenden Wert. Dies ergibt ein Schlüssel/Wert-Paar von "c": 3 .

Hier ist ein weiteres Beispiel:

SELECT JSON_SET('{"Name":"Homer", "Gender":"Male"}', '$.Age', 39) AS 'Ergebnis';

Ergebnis:

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

Beispiel 2 – Aktualisieren eines Werts

Im vorherigen Beispiel wurde ein Wert eingefügt. Dieses Beispiel aktualisiert einen vorhandenen Wert.

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

Ergebnis:

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

Hier ist ein weiteres Beispiel:

SELECT JSON_SET('{"Name":"Homer", "Geschlecht":"Männlich"}', '$.Name', "Bart") AS 'Ergebnis';

Ergebnis:

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

Beispiel 3 – Arrays

Sie können Werte in ein Array einfügen, indem Sie einen Pfad nach dem Ende des vorhandenen Arrays verwenden. Beispiel:

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

Ergebnis:

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

Wenn Sie jedoch einen bereits im Array vorhandenen Pfad verwenden, wird der Wert aktualisiert:

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

Ergebnis:

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

Wenn der vorhandene Wert kein Array ist, wird er automatisch als Array umbrochen und dann mit dem neuen Wert erweitert. Beispiel:

SELECT JSON_SET('{"a":1, "b":2}', '$[2]', 3) AS 'Ergebnis';

Ergebnis:

+-----------------------+| Ergebnis |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+

Beispiel 4 – Mehrere Werte

Sie können mehrere Werte gleichzeitig einfügen/aktualisieren. Fügen Sie einfach jedes Schlüssel/Wert-Paar durch ein Komma getrennt hinzu. Beispiel:

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

Ergebnis:

+-------------------------------+| Ergebnis |+------------------------------+| {"a":9, "b":2, "c":"Bart"} |+----------------------------------- ----+

Beispiel 5 – Ein größeres JSON-Dokument

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

SET @data ='{ "Person":{ "Name":"Homer", "Hobbies":["Essen", "Schlafen"] } }';SELECT JSON_SET(@data, '$.Person. Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Ergebnis';

Ergebnis:

+---------------------------------------------- -------------------+| Ergebnis |+------------------------------------------------------------ ------------------+| {"Person":{"Name":"Bart", "Hobbies":["Essen", "Unfug"]}} |+------------------ ----------------------------------------------+

Siehe auch JSON_INSERT() zum Einfügen von Werten, ohne vorhandene Werte zu ersetzen, und JSON_REPLACE() um nur vorhandene Werte zu ersetzen.