sql >> Database >  >> RDS >> MariaDB

MariaDB JSON_CONTAINS_PATH() uitgelegd

In MariaDB, JSON_CONTAINS_PATH() is een ingebouwde functie die aangeeft of een bepaald JSON-document gegevens bevat op het opgegeven pad of de opgegeven paden.

Het retourneert 1 als het document gegevens bevat op het/de opgegeven pad(en), 0 als dat niet het geval is, en NULL als een van de argumenten NULL is .

Syntaxis

De syntaxis gaat als volgt:

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

Waar json_doc is het JSON-document en path specificeert het pad waarnaar gegevens moeten worden gezocht. Er kunnen meerdere paden worden opgegeven.

De return_arg argument bepaalt hoe om te gaan met meerdere paden. Het kan one zijn of all .

  • one – De functie retourneert 1 als er ten minste één pad bestaat binnen het JSON-document.
  • all – De functie retourneert 1 alleen als alle paden bestaan ​​in het JSON-document.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

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

Resultaat:

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

In dit geval bestaat het pad en is het resultaat 1 .

In het volgende voorbeeld bestaat het pad niet en is het resultaat 0 :

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

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

Resultaat:

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

Meerdere paden

Hier zijn enkele voorbeelden die zoeken naar meerdere paden in het document:

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

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

Resultaat:

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

In dit voorbeeld hebben we naar twee paden gezocht. Het ene pad bestaat en het andere niet. Maar we hebben een 1 hoe dan ook (een positief resultaat). Dit komt omdat we one . hebben gebruikt als tweede argument. De one geeft aan dat we een 1 . krijgen als een van de paden bestaat.

Dit is wat er gebeurt als we all gebruiken als tweede argument:

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

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

Resultaat:

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

Deze keer is het resultaat 0 , omdat niet alle paden in het JSON-document bestaan.

Als we het ontbrekende pad wijzigen ($.type ) naar een bestaande, krijgen we een ander resultaat:

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

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

Resultaat:

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

Arrays

Hier is een voorbeeld dat test of een bepaalde index binnen een array bestaat:

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

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

Resultaat:

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

En dit is wat er gebeurt als we de index verhogen tot een niet-bestaande index:

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

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

Resultaat:

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

Geneste structuren

Hier is een voorbeeld dat zoekt naar een pad in een genest document:

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

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

Resultaat:

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

Nullargumenten

Als een argument NULL is , het resultaat is 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;

Resultaat:

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

Onjuist aantal parameters

Het verstrekken van geen argumenten resulteert in een fout:

SELECT JSON_CONTAINS_PATH();

Resultaat:

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

Hetzelfde gebeurt als je niet genoeg argumenten doorgeeft:

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

SELECT JSON_CONTAINS_PATH(@json_document);

Resultaat:

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

  1. PostgreSql 'PDOException' met bericht 'kon stuurprogramma niet vinden'

  2. SUM() Functie in PostgreSQL

  3. Gegoten van VARCHAR naar INT - MySQL

  4. MySQL Basic Database Administration Commando's - Deel I