sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB JSON_REPLACE() Forklaret

I MariaDB, JSON_REPLACE() er en indbygget funktion, der erstatter eksisterende værdier i et JSON-dokument og returnerer resultatet.

Syntaks

Syntaksen ser sådan ud:

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

Eksempel

Her er et eksempel til at demonstrere.

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

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

Resultat:

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

I dette tilfælde erstattede jeg værdien Cat med Dog .

Array-elementer

For at erstatte et array-element skal du angive elementets indeks:

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 dette tilfælde blev det andet array-element erstattet med den nye værdi. Arrays er nul-baserede, og derfor $.scores[1] henviser til det andet element i arrayet.

Flere stier

Syntaksen giver mulighed for at erstatte værdier på flere stier med et enkelt kald til JSON_REPLACE() .

Når du angiver flere stier, evalueres de fra venstre mod højre. Det betyder, at resultatet fra den tidligere evaluering bruges som værdi for den næste.

For det første er her et eksempel, der erstatter flere værdier i et dokument, baseret på deres nøgle:

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}     |
+------------------------------------------------------+

Hver værdi blev erstattet som forventet.

I det næste eksempel erstatter vi flere elementer i et 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]} |
+------------------------------------+

Nul-argumenter

Hvis json_doc eller en hvilken som helst af path argumenter er null , resultatet er NULL . Men hvis value argumentet er null , så erstattes værdien til 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 det følgende eksempel mangler et af sti-argumenterne fra hvert kald til JSON_REPLACE() . Dette resulterer i NULL returneres for begge opkald:

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 |
+------+------+

Forkert parameterantal

Kalder JSON_REPLACE() uden et argument resulterer i en fejl:

SELECT JSON_REPLACE();

Resultat:

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

Det er det samme, når der ikke sendes nok argumenter:

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

Resultat:

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

Lignende funktioner

JSON_INSERT() funktion kan indsætte nye data.

JSON_SET() funktion kan indsætte nye data og opdatere eksisterende data. Så JSON_SET() er ligesom JSON_INSERT() og JSON_REPLACE() i én funktion.


  1. Kan kommentarer hæmme ydeevnen af ​​lagrede procedurer?

  2. Installer Postgres.app på en Mac

  3. SQL opdeler værdier til flere rækker

  4. Få den første mandag i en måned i SQLite