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

MariaDB JSON_SET() erklärt

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:

+--------------------------------------+| JSON_SET(@json, '$.scores[1]', 7) |+------------------------------- ------+| {"name":"Wag", "Ergebnisse":[8, 7, 9]} |+---------------------- -----------+

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:

+---------------------------------------------- +| JSON_SET(@json, '$.weight', 10) |+----------------------------------- -----------+| {"Name":"Wag", "Typ":"Hund", "Gewicht":10} |+-------------------- ---------------------+

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:

+---------------------------------------------- ----+| JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |+-------------------- -------------------------+| {"Name":"Kratzer", "Typ":"Katze", "Gewicht":10} |+------------------------- -------------------------+

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“