sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB JSON_REPLACE() Förklarad

I MariaDB, JSON_REPLACE() är en inbyggd funktion som ersätter befintliga värden i ett JSON-dokument och returnerar resultatet.

Syntax

Syntaxen ser ut så här:

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

Exempel

Här är ett exempel att visa.

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

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

Resultat:

+--------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Dog') |
+--------------------------------------+
| {"name": "Wag", "type": "Dog"}       |
+--------------------------------------+

I det här fallet ersatte jag värdet Cat med Dog .

Arrayelement

För att ersätta ett matriselement, ange elementets index:

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

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

Resultat:

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

I det här fallet ersattes det andra matriselementet med det nya värdet. Arrayer är nollbaserade, och så $.scores[1] hänvisar till det andra elementet i arrayen.

Flera vägar

Syntaxen gör det möjligt att ersätta värden på flera sökvägar med ett enda anrop till JSON_REPLACE() .

När du tillhandahåller flera vägar utvärderas de från vänster till höger. Det betyder att resultatet från den tidigare utvärderingen används som värde för nästa.

Först, här är ett exempel som ersätter flera värden i ett dokument, baserat på deras nyckel:

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

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

Resultat:

+------------------------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |
+------------------------------------------------------+
| {"name": "Flutter", "type": "Bat", "weight": 20}     |
+------------------------------------------------------+

Varje värde ersattes som förväntat.

I nästa exempel ersätter vi flera element i en array:

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

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

Resultat:

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

Nollargument

Om json_doc eller någon av path argument är null , resultatet är NULL . Men om value argumentet är null , då ersätts värdet till null .

SELECT 
    JSON_REPLACE(null, '$.a', 1) AS a,
    JSON_REPLACE('{"a":1}', null, 1) AS b,
    JSON_REPLACE('{"a":1}', '$.a', null) AS c;

Resultat:

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

I följande exempel saknas ett av sökvägsargumenten i varje anrop till JSON_REPLACE() . Detta resulterar i NULL returneras för båda samtalen:

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;

Resultat:

+------+------+
| a    | b    |
+------+------+
| NULL | NULL |
+------+------+

Felaktig parameterräkning

Anropar JSON_REPLACE() utan argument resulterar i ett fel:

SELECT JSON_REPLACE();

Resultat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'

Det är samma sak när inte tillräckligt många argument skickas:

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

Resultat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'

Liknande funktioner

JSON_INSERT() funktionen kan infoga nya data.

JSON_SET() funktionen kan infoga nya data och uppdatera befintliga data. Alltså JSON_SET() är som JSON_INSERT() och JSON_REPLACE() i en funktion.


  1. SQLite främmande nyckel

  2. PostgreSQL:Varning:Konsolens teckentabell (437) skiljer sig från Windows teckentabell (1252)

  3. Verklig vs flytande poäng vs. pengar

  4. Ta bort rader från överordnade och underordnade tabeller