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_docist das JSON-Dokument.pathist der Pfad des Elements, für das Daten eingefügt oder der Wert aktualisiert werden soll.valist 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“