In MariaDB, JSON_INSERT()
ist eine integrierte Funktion, die Daten in ein JSON-Dokument einfügt und das Ergebnis zurückgibt.
Syntax
Die Syntax lautet wie folgt:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Wobei json_doc
ist das JSON-Dokument, path
ist der Pfad, wo die Daten eingefügt werden sollen, und val
ist der Wert, der an diesem Pfad eingefügt werden soll.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SET @json_document = '
{
"name": "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.type', "Dog");
Ergebnis:
Hier habe ich "type": "Dog"
eingefügt in das Dokument.
In diesem Fall habe ich $.type
verwendet als Weg. Daher type
ist der Schlüssel und Dog
ist der Wert.
Wenn der Pfad bereits existiert
Das Übergeben eines bereits im JSON-Dokument vorhandenen Pfads führt dazu, dass das Originaldokument unverändert zurückgegeben wird.
Beispiel:
SET @json_document = '
{
"name": "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark");
Ergebnis:
Arrays einfügen
Hier ist ein Beispiel für das Einfügen eines Arrays in ein JSON-Dokument:
SET @json_document = '
{
"name" : "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]');
Ergebnis:
An Arrays anhängen
Hier ist ein Beispiel für die Verwendung von JSON_INSERT()
um Daten an ein Array anzuhängen:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog" ]
}
';
SELECT JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog");
Ergebnis:
Obwohl es für dieses Beispiel gut funktioniert hat, hätte es leicht fehlschlagen können. Wenn wir beispielsweise versuchen, den Wert an einer anderen Stelle im Array einzufügen, funktioniert es nicht:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog" ]
}
';
SELECT JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog");
Ergebnis:
Um Werte in ein Array einzufügen, verwenden Sie JSON_ARRAY_INSERT()
funktionieren stattdessen.
Auch wenn wir im obigen Beispiel einen Wert an ein Array anhängen konnten, sind Sie wahrscheinlich besser dran, wenn Sie JSON_ARRAY_APPEND()
verwenden Funktion, da es speziell für diesen Zweck entwickelt wurde.
Verschachtelte Objekte
Hier ist ein Beispiel für das Einfügen eines Werts in ein Objekt, das in einem anderen Objekt verschachtelt ist:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog"
}
}
}
';
SELECT JSON_INSERT(
@json_document,
'$.details.awards.Sumo 2020',
'Biggest Dog'
);
Ergebnis:
{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"}}}
Das Ergebnis verschönern
Wir können JSON_DETAILED()
verwenden Funktion, um das Ergebnis besser lesbar zu machen:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog"
}
}
}
';
SELECT
JSON_DETAILED(
JSON_INSERT(
@json_document,
'$.details.awards.Sumo 2020',
'Biggest Dog'
)
);
Ergebnis:
{ "_id":1, "name":"Wag", "details":{ "type":"Hund", "gewicht":20, "awards":{ "Florida Dog Awards":"Top Hund", "New York Marathon":"Schnellster Hund", "Sumo 2020":"Größter Hund" } }}
Null-Argumente
Wenn eines der json_document
oder path
Argumente sind NULL
, ist das Ergebnis NULL
:
SELECT
JSON_INSERT(null, '$.type', 'Dog'),
JSON_INSERT('{"a":1}', null, 'Dog');
Ergebnis:
+------------------------------------+--------- ----------------------------+| JSON_INSERT(null, '$.type', 'Hund') | JSON_INSERT('{"a":1}', null, 'Hund') |+------------------------------ ------+-------------------------------------+| NULL | NULL |+------------------------------------+---------- ----------------------------+
Wenn jedoch der value
Argument ist NULL
, wird der Schlüssel am angegebenen Pfad mit dem Wert null
hinzugefügt :
SELECT JSON_INSERT('{"a":1}', '$.type', null);
Ergebnis:
+----------------------------------------+| JSON_INSERT('{"a":1}', '$.type', null) |+------------------------------------ -------------+| {"a":1, "typ":null} |+----------------------------------- -----+
Falsche Parameteranzahl
Wenn Sie keine Argumente angeben, wird ein Fehler ausgegeben:
SELECT JSON_INSERT();
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_INSERT“
Das Gleiche gilt, wenn Sie zu wenige oder zu viele Argumente angeben:
SELECT JSON_INSERT('{ "a": 1}');
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_INSERT“
Ähnliche Funktionen
Der JSON_REPLACE()
Funktion kann vorhandene Daten aktualisieren.
Der JSON_SET()
Funktion kann vorhandene Daten aktualisieren und neue Daten einfügen. Also JSON_SET()
ist wie JSON_INSERT()
und JSON_REPLACE()
in einer Funktion.