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

JSON_INSERT() – Werte in ein JSON-Dokument in MySQL einfügen

In MySQL der JSON_INSERT() Funktion fügt einen Wert in ein JSON-Dokument ein 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.

Syntax

Die Syntax lautet wie folgt:

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

Wo:

  • json_doc ist das JSON-Dokument.
  • path ist der Pfad des Elements, für das der neue Wert eingefügt werden soll.
  • val ist der neue Wert, der eingefügt 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_INSERT('{"a":1, "b":2}', '$.c', 3) AS 'Ergebnis';

Ergebnis:

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

Das 3. Argument wird also am angegebenen Pfad in das Array eingefügt. In diesem Fall verwende ich $.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_INSERT('{"Name":"Homer", "Gender":"Male"}', '$.Age', 39) AS 'Ergebnis';

Ergebnis:

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

Beispiel 2 – Versuch, einen bestehenden Pfad zu überschreiben

Ein Pfad-Wert-Paar für einen vorhandenen Pfad im Dokument wird ignoriert und überschreibt den vorhandenen Dokumentwert nicht.

Wenn wir also das vorherige Beispiel ändern, um einen Wert bei Name einzufügen (die bereits existiert), findet keine Einfügung statt:

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

Ergebnis:

+-------------------------------------+| Ergebnis |+-------------------------------------+| {"Name":"Homer", "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_INSERT('[1, 2, 3]', '$[3]', 4) AS 'Ergebnis';

Ergebnis:

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

Wenn Sie jedoch einen bereits im Array vorhandenen Pfad verwenden, bleibt das Array unverändert:

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

Ergebnis:

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

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

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

Ergebnis:

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

Aber noch einmal, wenn Sie versuchen, einen Wert in einen bereits vorhandenen Pfad einzufügen, bleibt das JSON-Dokument unverändert:

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

Ergebnis:

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

Beispiel 4 – 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_INSERT(@data, '$.Person. Hobbys[2]', "Base Jumping") AS 'Ergebnis';

Ergebnis:

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

Siehe auch JSON_ARRAY_INSERT() und JSON_ARRAY_APPEND() wenn Sie Daten in ein JSON-Array einfügen oder anhängen müssen.