In MariaDB, JSON_SET()
ist eine integrierte Funktion, die Daten in ein JSON-Dokument aktualisiert oder einfügt und das Ergebnis zurückgibt.
JSON_SET()
kann Daten aktualisieren und einfügen, wohingegen JSON_INSERT()
kann nur Daten einfügen und JSON_REPLACE()
kann nur Daten aktualisieren.
Syntax
Die Syntax lautet wie folgt:
JSON_SET(json_doc, path, val[, path, val] ...)
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.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT JSON_SET(@json, '$.type', 'Dog');
Ergebnis:
+----------------------------------------------+| JSON_SET(@json, '$.type', 'Hund') |+---------------------------------------------- -+| {"Name":"Wag", "Typ":"Hund"} |+------------------------------- ---+
In diesem Fall habe ich den Wert des type
aktualisiert Mitglied Cat
zu Dog
.
Array-Elemente
Um ein Array-Element zu aktualisieren oder einzufügen, geben Sie den Index des Elements an:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[1]', 7);
Ergebnis:
In diesem Fall wurde das zweite Array-Element mit dem neuen Wert aktualisiert. Arrays sind nullbasiert, also $.scores[1]
bezieht sich auf das zweite Element im Array.
Daten einfügen
In den vorherigen Beispielen wurden vorhandene Daten aktualisiert. Hier ist ein Beispiel für das Einfügen neuer Daten:
SET @json = '
{
"name" : "Wag",
"type" : "Dog"
}
';
SELECT JSON_SET(@json, '$.weight', 10);
Ergebnis:
Hier haben wir ein neues Schlüssel/Wert-Paar eingefügt ("weight": 10
).
Unten sehen Sie ein Beispiel für das Hinzufügen eines neuen Elements zu einem Array:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[3]', 7);
Ergebnis:
+------------------------------------+| JSON_SET(@json, '$.scores[3]', 7) |+------------------------------- ---------+| {"name":"Wag", "Ergebnisse":[8, 0, 9, 7]} |+-------------------- ----------------+
Dieses Array-Beispiel könnte auch mit JSON_ARRAY_INSERT()
erstellt werden oder JSON_ARRAY_APPEND()
.
Mehrere Pfade
Die Syntax ermöglicht das Setzen/Aktualisieren von Werten auf mehreren Pfaden mit einem einzigen Aufruf von JSON_SET()
.
Beispiel:
SET @json = '
{
"name" : "Scratch",
"type" : "Rat"
}
';
SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);
Ergebnis:
Im nächsten Beispiel fügen wir einen neuen Wert in ein Array ein und aktualisieren ein anderes:
SET @json = '{ "scores" : [ 0, 1, 2 ] }';
SELECT
JSON_SET(
@json,
'$.scores[1]', "a",
'$.scores[3]', "b"
) AS Result;
Ergebnis:
+------------------------------+| Ergebnis |+------------------------------+| {"Ergebnisse":[0, "a", 2, "b"]} |+------------------------------------ -+
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_SET(null, '$.a', 1) AS a,
JSON_SET('{"a":1}', null, 1) AS b,
JSON_SET('{"a":1}', '$.a', null) AS c;
Ergebnis:
+------+------+-------------+| ein | b | c |+------+------+------------+| NULL | NULL | {"a":null} |+------+------+-------------+
Im folgenden Beispiel fehlt bei jedem Aufruf von JSON_SET()
eines der Pfadargumente . In beiden Fällen ist das Ergebnis NULL
:
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT
JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;
Ergebnis:
+------+------+| ein | b |+------+------+| NULL | NULL |+------+------+
Falsche Parameteranzahl
Aufruf von JSON_SET()
ohne Argument führt zu einem Fehler:
SELECT JSON_SET();
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_SET“
Das Gleiche gilt, wenn nicht genügend Argumente übergeben werden:
SELECT JSON_SET('{"a":1}');
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_SET“