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

MariaDB JSON_INSERT() Forklaret

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

Syntaks

Syntaksen ser sådan ud:

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

Hvor json_doc er JSON-dokumentet, path er stien til hvor dataene skal indsættes, og val er den værdi, der skal indsættes på den sti.

Eksempel

Her er et eksempel til at demonstrere.

SET @json_document = '
    { 
        "name": "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.type', "Dog");

Resultat:

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

Her indsatte jeg "type": "Dog" ind i dokumentet.

I dette tilfælde brugte jeg $.type som stien. Derfor type er nøglen og Dog er værdien.

Når stien allerede eksisterer

Passering af en sti, der allerede findes i JSON-dokumentet, resulterer i, at det originale dokument returneres uændret.

Eksempel:

SET @json_document = '
    { 
        "name": "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark");

Resultat:

+-----------------------------------------------+
| JSON_INSERT(@json_document, '$.name', "Bark") |
+-----------------------------------------------+
| {"name": "Wag"}                               |
+-----------------------------------------------+

Indsættelse af arrays

Her er et eksempel på indsættelse af et array i et JSON-dokument:

SET @json_document = '
    { 
        "name" : "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]');

Resultat:

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

Tilføjelse til arrays

Her er et eksempel på brug af JSON_INSERT() for at tilføje data til et array:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog" ] 
    }
';
SELECT JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog");

Resultat:

+--------------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog")    |
+--------------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog", "Biggest Dog"]} |
+--------------------------------------------------------------+

Men selvom det fungerede fint for dette eksempel, kunne det nemt have mislykkedes. For eksempel, hvis vi forsøger at indsætte værdien et andet sted i arrayet, virker det ikke:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog" ] 
    }
';
SELECT JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog");

Resultat:

+-----------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog") |
+-----------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog"]}             |
+-----------------------------------------------------------+

For at indsætte værdier i et array skal du bruge JSON_ARRAY_INSERT() funktion i stedet for.

Selvom vi var i stand til at tilføje en værdi til en matrix i ovenstående eksempel, er du sandsynligvis bedre stillet ved at bruge JSON_ARRAY_APPEND() funktion, da den er designet specifikt til det formål.

Indlejrede objekter

Her er et eksempel på indsættelse af en værdi i et objekt indlejret i et andet objekt:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog"
            }
        }
    }
';
SELECT JSON_INSERT(
    @json_document, 
    '$.details.awards.Sumo 2020',
    'Biggest Dog'
    );

Resultat:

{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"}}}

Fremstil resultatet

Vi kan bruge JSON_DETAILED() funktion for at gøre resultatet nemmere at læse:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog"
            }
        }
    }
';
SELECT 
    JSON_DETAILED(
        JSON_INSERT(
            @json_document, 
            '$.details.awards.Sumo 2020',
            'Biggest Dog'
        )
    );

Resultat:

{
    "_id": 1,
    "name": "Wag",
    "details": 
    {
        "type": "Dog",
        "weight": 20,
        "awards": 
        {
            "Florida Dog Awards": "Top Dog",
            "New York Marathon": "Fastest Dog",
            "Sumo 2020": "Biggest Dog"
        }
    }
}

Nul-argumenter

Hvis en af ​​json_document eller path argumenter er NULL , resultatet er NULL :

SELECT 
    JSON_INSERT(null, '$.type', 'Dog'),
    JSON_INSERT('{"a":1}', null, 'Dog');

Resultat:

+------------------------------------+-------------------------------------+
| JSON_INSERT(null, '$.type', 'Dog') | JSON_INSERT('{"a":1}', null, 'Dog') |
+------------------------------------+-------------------------------------+
| NULL                               | NULL                                |
+------------------------------------+-------------------------------------+

Men hvis value argumentet er NULL , tilføjes nøglen ved den angivne sti med værdien null :

SELECT JSON_INSERT('{"a":1}', '$.type', null);

Resultat:

+----------------------------------------+
| JSON_INSERT('{"a":1}', '$.type', null) |
+----------------------------------------+
| {"a": 1, "type": null}                 |
+----------------------------------------+

Forkert parameterantal

Angivelse af ingen argumenter resulterer i en fejl:

SELECT JSON_INSERT();

Resultat:

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

Det er det samme, når du giver for få eller for mange argumenter:

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

Resultat:

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

Lignende funktioner

JSON_REPLACE() funktion kan opdatere eksisterende data.

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


  1. Du kan nu bruge Access med Microsoft Azure MFA!

  2. Kan jeg kommaafgrænse flere rækker i én kolonne?

  3. GI 19c RPM Package Manager Database

  4. Hvad er bedre i MYSQL count(*) eller count(1)?