MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

MariaDB JSON_INSERT() erklärt

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:

+---------------------------------------------- +| JSON_INSERT(@json_document, '$.type', "Hund") |+---------------------------------------------- -------------+| {"Name":"Wag", "Typ":"Hund"} |+------------------------------- ---------------+

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:

+---------------------------------------------- -+| JSON_INSERT(@json_document, '$.name', "Bark") |+---------------------------------------------- --------------+| {"Name":"Wag"} |+--------------------------------------------------- --------+

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:

+---------------------------------------------- ----------+| JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]') |+---------------------- -----------------------------+| {"name":"Wag", "scores":"[ 8, 7, 9 ]"} |+-------------------- -------------------------------+

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:

+---------------------------------------------- ----------------+| JSON_INSERT(@json_document, '$.awards[2]', "Größter Hund") |+------------------------ ---------------------------------+| {"_id":1, "Auszeichnungen":["Platzhirsch", "Bester Hund", "Größter Hund"]} |+-------------------- -------------------------------------------+

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:

+---------------------------------------------- -------------+| JSON_INSERT(@json_document, '$.awards[1]', "Größter Hund") |+------------------------ ------------------------------+| {"_id":1, "Auszeichnungen":["Platzhirsch", "Bester Hund"]} |+-------------------- ---------------------------------+

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.