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

MariaDB JSON_SET() Forklaret

I MariaDB, JSON_SET() er en indbygget funktion, der opdaterer eller indsætter data i et JSON-dokument og returnerer resultatet.

JSON_SET() kan opdatere og indsætte data, hvorimod JSON_INSERT() kan kun indsætte data og JSON_REPLACE() kan kun opdatere data.

Syntaks

Syntaksen ser sådan ud:

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

Hvor:

  • json_doc er JSON-dokumentet.
  • path er stien til det element, som der skal indsættes data for eller opdatere værdien ved.
  • val er den nye værdi.

Eksempel

Her er et eksempel til at demonstrere.

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

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

Resultat:

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

I dette tilfælde opdaterede jeg værdien af ​​type medlem Cat til Dog .

Array-elementer

For at opdatere eller indsætte et array-element skal du angive elementets indeks:

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

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

Resultat:

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

I dette tilfælde blev det andet array-element opdateret med den nye værdi. Arrays er nul-baserede, og derfor $.scores[1] henviser til det andet element i arrayet.

Indsæt data

De tidligere eksempler opdaterede eksisterende data. Her er et eksempel på indsættelse af nye data:

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

SELECT JSON_SET(@json, '$.weight', 10);

Resultat:

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

Her indsatte vi et nyt nøgle/værdi-par ("weight": 10 ).

Nedenfor er et eksempel på tilføjelse af et nyt element til en matrix:

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

SELECT JSON_SET(@json, '$.scores[3]', 7);

Resultat:

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

Dette array-eksempel kunne også udføres med JSON_ARRAY_INSERT() eller JSON_ARRAY_APPEND() .

Flere stier

Syntaksen giver mulighed for at indstille/opdatere værdier på flere stier med et enkelt kald til JSON_SET() .

Eksempel:

SET @json = '
    { 
        "name" : "Scratch", 
        "type" : "Rat"
    }
';

SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);

Resultat:

+--------------------------------------------------+
| JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |
+--------------------------------------------------+
| {"name": "Scratch", "type": "Cat", "weight": 10} |
+--------------------------------------------------+

I det næste eksempel indsætter vi en ny værdi i et array og opdaterer en anden:

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

SELECT 
    JSON_SET(
        @json, 
        '$.scores[1]', "a", 
        '$.scores[3]', "b"
    ) AS Result;

Resultat:

+------------------------------+
| Result                       |
+------------------------------+
| {"scores": [0, "a", 2, "b"]} |
+------------------------------+

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_SET(null, '$.a', 1) AS a,
    JSON_SET('{"a":1}', null, 1) AS b,
    JSON_SET('{"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_SET() . I begge tilfælde er resultatet 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;

Resultat:

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

Forkert parameterantal

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

SELECT JSON_SET();

Resultat:

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

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

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

Resultat:

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

  1. Eksempel på Oracle IF-tilstand

  2. Hvordan viser man UTF-8-tegn i phpMyAdmin?

  3. FrankenQueries:når SQL og NoSQL kolliderer

  4. Workplace Encounters:Genvinde plads fra en overdimensioneret database