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

MariaDB JSON_CONTAINS_PATH() Forklaret

I MariaDB, JSON_CONTAINS_PATH() er en indbygget funktion, der angiver, om et givet JSON-dokument indeholder data på den eller de angivne stier.

Det returnerer 1 hvis dokumentet indeholder data ved den/de angivne sti(er), 0 hvis den ikke gør det, og NULL hvis nogen af ​​argumenterne er NULL .

Syntaks

Syntaksen ser sådan ud:

JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)

Hvor json_doc er JSON-dokumentet og path angiver stien, som data skal findes for. Der kan angives flere stier.

return_arg argument bestemmer, hvordan man håndterer flere stier. Det kan være one eller all .

  • one – Funktionen returnerer 1 hvis der findes mindst én sti i JSON-dokumentet.
  • all – Funktionen returnerer 1 kun hvis alle stier findes i JSON-dokumentet.

Eksempel

Her er et eksempel til at demonstrere.

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');

Resultat:

+-----------------------------------------------------+
| JSON_CONTAINS_PATH(@json_document, 'one', '$.name') |
+-----------------------------------------------------+
|                                                   1 |
+-----------------------------------------------------+

I dette tilfælde eksisterer stien, og resultatet er 1 .

I det næste eksempel eksisterer stien ikke, og resultatet er 0 :

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');

Resultat:

+-----------------------------------------------------+
| JSON_CONTAINS_PATH(@json_document, 'one', '$.type') |
+-----------------------------------------------------+
|                                                   0 |
+-----------------------------------------------------+

Flere stier

Her er nogle eksempler, der søger efter flere stier i dokumentet:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.type', 
        '$.weight'
        ) AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

I dette eksempel søgte vi efter to veje. Den ene vej eksisterer, og den anden gør ikke. Men vi fik en 1 alligevel (et positivt resultat). Dette skyldes, at vi brugte one som det andet argument. one angiver, at vi får en 1 hvis nogen af ​​stierne findes.

Her er, hvad der sker, hvis vi bruger all som det andet argument:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.type', 
    '$.weight'
    ) AS Result;

Resultat:

+--------+
| Result |
+--------+
|      0 |
+--------+

Denne gang er resultatet 0 , fordi ikke alle stier findes i JSON-dokumentet.

Hvis vi ændrer den manglende sti ($.type ) til en, der eksisterer, får vi et andet resultat:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.name', 
    '$.weight'
    ) AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Arrays

Her er et eksempel, der tester, om et givet indeks findes i et array:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[2]'
        ) AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Og her er, hvad der sker, hvis vi øger indekset til et ikke-eksisterende:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[3]'
        ) AS Result;

Resultat:

+--------+
| Result |
+--------+
|      0 |
+--------+

Indlejrede strukturer

Her er et eksempel, der leder efter en sti i et indlejret dokument:

SET @json_document = '
    { 
        "name": "Wag", 
        "specs": { 
            "weight": 10, 
            "height": 30 
            } 
    }
';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'one', 
    '$.specs.height'
    ) AS Result;

Resultat:

+--------+
| Result |
+--------+
|      1 |
+--------+

Nul-argumenter

Hvis et argument er NULL , resultatet er NULL :

SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT 
    JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
    JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
    JSON_CONTAINS_PATH(@json_document, 'one', null) AS c;

Resultat:

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

Forkert parameterantal

Angivelse af ingen argumenter resulterer i en fejl:

SELECT JSON_CONTAINS_PATH();

Resultat:

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

Det samme sker, når du ikke sender nok argumenter:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document);

Resultat:

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

  1. Fremskridt med online opgradering

  2. Mytop – Et nyttigt værktøj til overvågning af MySQL/MariaDB-ydeevne i Linux

  3. Sådan får du sidste post i hver gruppe i MySQL

  4. Sådan benchmarker du MySQL &MariaDB's ydeevne ved hjælp af SysBench