sql >> Database >  >> RDS >> MariaDB

MariaDB JSON_REPLACE() uitgelegd

In MariaDB, JSON_REPLACE() is een ingebouwde functie die bestaande waarden in een JSON-document vervangt en het resultaat retourneert.

Syntaxis

De syntaxis gaat als volgt:

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

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

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

Resultaat:

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

In dit geval heb ik de waarde Cat vervangen met Dog .

Array-elementen

Om een ​​array-element te vervangen, specificeert u de index van het element:

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

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

Resultaat:

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

In dit geval is het tweede array-element vervangen door de nieuwe waarde. Arrays zijn gebaseerd op nul, en dus $.scores[1] verwijst naar het tweede element in de array.

Meerdere paden

De syntaxis maakt het mogelijk om waarden op meerdere paden te vervangen door een enkele aanroep van JSON_REPLACE() .

Wanneer u meerdere paden opgeeft, worden ze van links naar rechts geëvalueerd. Dit betekent dat het resultaat van de eerdere evaluatie wordt gebruikt als waarde voor de volgende.

Ten eerste is hier een voorbeeld dat meerdere waarden in een document vervangt op basis van hun sleutel:

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

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

Resultaat:

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

Elke waarde is zoals verwacht vervangen.

In het volgende voorbeeld vervangen we meerdere elementen in een array:

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

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

Resultaat:

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

Nullargumenten

Als de json_doc of een van de path argumenten is null , het resultaat is NULL . Maar als de value argument is null , dan wordt de waarde vervangen door 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;

Resultaat:

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

In het volgende voorbeeld ontbreekt een van de padargumenten bij elke aanroep naar JSON_REPLACE() . Dit resulteert in NULL wordt teruggestuurd voor beide oproepen:

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;

Resultaat:

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

Onjuist aantal parameters

Aanroepen van JSON_REPLACE() zonder een argument resulteert in een fout:

SELECT JSON_REPLACE();

Resultaat:

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

Het is hetzelfde als er niet genoeg argumenten worden doorgegeven:

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

Resultaat:

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

Vergelijkbare functies

De JSON_INSERT() functie kan nieuwe gegevens invoegen.

De JSON_SET() functie kan nieuwe gegevens invoegen en bestaande gegevens bijwerken. Dus JSON_SET() is als JSON_INSERT() en JSON_REPLACE() in één functie.


  1. Opties voor cloudback-up voor MySQL- en MariaDB-databases

  2. SQL:vind het maximale record per groep

  3. MySQL-TEKST versus BLOB versus CLOB

  4. MariaDB Samengestelde datum- en tijdseenheden uitgelegd