sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB JSON_CONTAINS_PATH() Förklarad

I MariaDB, JSON_CONTAINS_PATH() är en inbyggd funktion som indikerar om ett givet JSON-dokument innehåller data vid den eller de angivna sökvägarna.

Den returnerar 1 om dokumentet innehåller data vid den/de angivna sökvägen, 0 om den inte gör det, och NULL om något av argumenten är NULL .

Syntax

Syntaxen ser ut så här:

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

Där json_doc är JSON-dokumentet och path anger sökvägen för att hitta data. Flera vägar kan tillhandahållas.

return_arg argument bestämmer hur man hanterar flera vägar. Det kan vara one eller all .

  • one – Funktionen returnerar 1 om det finns minst en sökväg i JSON-dokumentet.
  • all – Funktionen returnerar 1 endast om alla sökvägar finns i JSON-dokumentet.

Exempel

Här är ett exempel att visa.

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 det här fallet finns sökvägen, och resultatet är 1 .

I nästa exempel existerar inte sökvägen, och resultatet är 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 |
+-----------------------------------------------------+

Flera vägar

Här är några exempel som söker efter flera sökvägar i dokumentet:

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

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

Resultat:

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

I det här exemplet sökte vi efter två vägar. En väg finns och den andra inte. Men vi fick en 1 i alla fall (ett positivt resultat). Detta beror på att vi använde one som det andra argumentet. Den one anger att vi får en 1 om någon av vägarna finns.

Så här händer om vi använder all som det andra argumentet:

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

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

Resultat:

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

Den här gången är resultatet 0 , eftersom inte alla sökvägar finns i JSON-dokumentet.

Om vi ​​ändrar den saknade sökvägen ($.type ) än en som finns får vi ett annat resultat:

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

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

Resultat:

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

Arrayer

Här är ett exempel som testar om ett givet index finns inom en 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 |
+--------+

Och här är vad som händer om vi ökar indexet till ett obefintligt:

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

Inkapslade strukturer

Här är ett exempel som letar efter en sökväg i ett kapslat 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 |
+--------+

Nollargument

Om något argument är NULL , resultatet är 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 |
+------+------+------+

Felaktig parameterräkning

Att inte tillhandahålla några argument resulterar i ett fel:

SELECT JSON_CONTAINS_PATH();

Resultat:

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

Samma sak händer när du inte skickar tillräckligt med argument:

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. Hur returnerar man en array från Java till PL/SQL?

  2. En recension av de nya analytiska fönsterfunktionerna i MySQL 8.0

  3. Hur kan vi se den krypterade lagrade procedurens kropp i SSMS?

  4. mysql välj från n sista raderna