In MariaDB, JSON_REPLACE()
ist eine integrierte Funktion, die vorhandene Werte in einem JSON-Dokument ersetzt und das Ergebnis zurückgibt.
Syntax
Die Syntax lautet wie folgt:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT JSON_REPLACE(@json, '$.type', 'Dog');
Ergebnis:
In diesem Fall habe ich den Wert Cat
ersetzt mit Dog
.
Array-Elemente
Um ein Array-Element zu ersetzen, geben Sie den Index des Elements an:
SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';
SELECT JSON_REPLACE(@json, '$.scores[1]', 7);
Ergebnis:
+--------------------------+| JSON_REPLACE(@json, '$.scores[1]', 7) |+------------------------------- -------+| {"Name":"Wag", "Ergebnisse":[8, 7, 9]} |+---------------------- -------------+
In diesem Fall wurde das zweite Array-Element durch den neuen Wert ersetzt. Arrays sind nullbasiert, also $.scores[1]
bezieht sich auf das zweite Element im Array.
Mehrere Pfade
Die Syntax ermöglicht das Ersetzen von Werten an mehreren Pfaden mit einem einzigen Aufruf von JSON_REPLACE()
.
Wenn Sie mehrere Pfade angeben, werden sie von links nach rechts ausgewertet. Das bedeutet, dass das Ergebnis der vorherigen Auswertung als Wert für die nächste verwendet wird.
Zuerst ist hier ein Beispiel, das mehrere Werte in einem Dokument basierend auf ihrem Schlüssel ersetzt:
SET @json = '
{
"name" : "Flutter",
"type" : "Bird",
"weight" : 10
}
';
SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);
Ergebnis:
Jeder Wert wurde wie erwartet ersetzt.
Im nächsten Beispiel ersetzen wir mehrere Elemente in einem Array:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REPLACE(
@json,
'$.scores[2]', "a",
'$.scores[4]', "b"
) AS Result;
Ergebnis:
+------------------------------------+| Ergebnis |+------------------------------------+| {"Ergebnisse":[0, 1, "a", 3, "b", 5]} |+-------------------- -----------+
Null-Argumente
Wenn die Datei json_doc
oder einen der path
Argumente ist null
, ist das Ergebnis NULL
. Aber wenn der value
Argument ist null
, dann wird der Wert durch null
ersetzt .
SELECT
JSON_REPLACE(null, '$.a', 1) AS a,
JSON_REPLACE('{"a":1}', null, 1) AS b,
JSON_REPLACE('{"a":1}', '$.a', null) AS c;
Ergebnis:
+------+------+-------------+| ein | b | c |+------+------+------------+| NULL | NULL | {"a":null} |+------+------+-------------+
Im folgenden Beispiel fehlt bei jedem Aufruf von JSON_REPLACE()
eines der Pfadargumente . Dies ergibt NULL
für beide Aufrufe zurückgegeben:
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT
JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b;
Ergebnis:
+------+------+| ein | b |+------+------+| NULL | NULL |+------+------+
Falsche Parameteranzahl
Aufruf von JSON_REPLACE()
ohne Argument führt zu einem Fehler:
SELECT JSON_REPLACE();
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_REPLACE“
Das Gleiche gilt, wenn nicht genügend Argumente übergeben werden:
SELECT JSON_REPLACE('{"a":1}');
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_REPLACE“
Ähnliche Funktionen
Der JSON_INSERT()
Funktion kann neue Daten einfügen.
Der JSON_SET()
Funktion kann neue Daten einfügen und vorhandene Daten aktualisieren. Also JSON_SET()
ist wie JSON_INSERT()
und JSON_REPLACE()
in einer Funktion.