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

MariaDB JSON_REPLACE() erklärt

In MariaDB, JSON_REPLACE() ist eine integrierte Funktion, die vorhandene Werte in einem JSON-Dokument ersetzt und das Ergebnis zurückgibt.

Syntax

Die Syntax lautet wie folgt:

JSON_REPLACE(json_doc, path, val[, path, val] ...) 

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SET @json = '{ "name" : "Wag", "type" : "Cat" }';

SELECT JSON_REPLACE(@json, '$.type', 'Dog'); 

Ergebnis:

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

In diesem Fall habe ich den Wert Cat ersetzt mit Dog .

Array-Elemente

Um ein Array-Element zu ersetzen, geben Sie den Index des Elements an:

SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';

SELECT JSON_REPLACE(@json, '$.scores[1]', 7); 

Ergebnis:

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

In diesem Fall wurde das zweite Array-Element durch den neuen Wert ersetzt. Arrays sind nullbasiert, also $.scores[1] bezieht sich auf das zweite Element im Array.

Mehrere Pfade

Die Syntax ermöglicht das Ersetzen von Werten an mehreren Pfaden mit einem einzigen Aufruf von JSON_REPLACE() .

Wenn Sie mehrere Pfade angeben, werden sie von links nach rechts ausgewertet. Das bedeutet, dass das Ergebnis der vorherigen Auswertung als Wert für die nächste verwendet wird.

Zuerst ist hier ein Beispiel, das mehrere Werte in einem Dokument basierend auf ihrem Schlüssel ersetzt:

SET @json = '
    { 
        "name" : "Flutter", 
        "type" : "Bird",
        "weight" : 10
    }
';

SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20); 

Ergebnis:

+---------------------------------------------- --------+| JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |+-------------------- -----------------------------+| {"Name":"Flattern", "Typ":"Fledermaus", "Gewicht":20} |+-------------------- -----------------------------+

Jeder Wert wurde wie erwartet ersetzt.

Im nächsten Beispiel ersetzen wir mehrere Elemente in einem Array:

SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';

SELECT 
    JSON_REPLACE(
        @json, 
        '$.scores[2]', "a", 
        '$.scores[4]', "b"
    ) AS Result; 

Ergebnis:

+------------------------------------+| Ergebnis |+------------------------------------+| {"Ergebnisse":[0, 1, "a", 3, "b", 5]} |+-------------------- -----------+

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_REPLACE(null, '$.a', 1) AS a,
    JSON_REPLACE('{"a":1}', null, 1) AS b,
    JSON_REPLACE('{"a":1}', '$.a', null) AS c; 

Ergebnis:

+------+------+-------------+| ein | b | c |+------+------+------------+| NULL | NULL | {"a":null} |+------+------+-------------+

Im folgenden Beispiel fehlt bei jedem Aufruf von JSON_REPLACE() eines der Pfadargumente . Dies ergibt NULL für beide Aufrufe zurückgegeben:

SET @json = '{ "name" : "Wag", "type" : "Cat" }';

SELECT 
    JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b; 

Ergebnis:

+------+------+| ein | b |+------+------+| NULL | NULL |+------+------+

Falsche Parameteranzahl

Aufruf von JSON_REPLACE() ohne Argument führt zu einem Fehler:

SELECT JSON_REPLACE(); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_REPLACE“

Das Gleiche gilt, wenn nicht genügend Argumente übergeben werden:

SELECT JSON_REPLACE('{"a":1}'); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_REPLACE“

Ähnliche Funktionen

Der JSON_INSERT() Funktion kann neue Daten einfügen.

Der JSON_SET() Funktion kann neue Daten einfügen und vorhandene Daten aktualisieren. Also JSON_SET() ist wie JSON_INSERT() und JSON_REPLACE() in einer Funktion.