sql >> Database >  >> RDS >> MariaDB

MariaDB JSON_EXISTS() uitgelegd

In MariaDB, JSON_EXISTS() is een ingebouwde functie waarmee u kunt controleren of een waarde bestaat op een opgegeven pad in het JSON-document.

Het accepteert het JSON-document als argument en retourneert 1 als het pad is gevonden, en 0 als dat niet het geval is.

De MariaDB-documentatie stelt dat de functie "bepaalt of een gespecificeerde JSON-waarde bestaat in de gegeven gegevens". De functie lijkt echter niet echt te controleren op een bepaalde waarde. Het is waarschijnlijk nauwkeuriger om te zeggen dat het bepaalt of een gespecificeerd pad bestaat, of dat er een waarde bestaat op het opgegeven pad.

Om te controleren of de werkelijke waarde bestaat, kunt u de JSON_CONTAINS() . gebruiken functie.

Syntaxis

De syntaxis gaat als volgt:

JSON_EXISTS(json_doc, path)

Waar json_doc is het JSON-document en path is het pad om te vinden.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');

Resultaat:

+--------------------------------------------+
| JSON_EXISTS('{ "name": "Wag" }', '$.name') |
+--------------------------------------------+
|                                          1 |
+--------------------------------------------+

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

Als het pad niet wordt gevonden, is het resultaat 0 , zoals dit:

SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');

Resultaat:

+--------------------------------------------+
| JSON_EXISTS('{ "name": "Wag" }', '$.type') |
+--------------------------------------------+
|                                          0 |
+--------------------------------------------+

Arrays

In dit voorbeeld controleer ik op het bestaan ​​van een element in een bepaalde index van een array:

SELECT JSON_EXISTS(
    '{ 
        "name": "Wag", 
        "scores": [ 10, 8, 7 ] 
    }', 
    "$.scores[2]"
    ) AS Result;

Resultaat:

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

Dit is wat er gebeurt als de index niet in de array bestaat:

SELECT JSON_EXISTS(
    '{ 
        "name": "Wag", 
        "scores": [ 10, 8, 7 ] 
    }', 
    '$.scores[3]'
    ) AS Result;

Resultaat:

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

Groter JSON-document

Hier is een voorbeeld dat een iets groter JSON-document gebruikt. Hier controleer ik op een sleutel die bestaat binnen verschillende niveaus van nesting:

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

Resultaat:

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

Nullargumenten

Als een van de argumenten NULL . is , het resultaat is NULL :

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

Resultaat:

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

Ongeldige JSON

Het doorgeven van ongeldige JSON resulteert in NULL :

SELECT JSON_EXISTS('{1}', '$.a');

Resultaat:

+---------------------------+
| JSON_EXISTS('{1}', '$.a') |
+---------------------------+
|                      NULL |
+---------------------------+

Onjuist aantal parameters

Het verstrekken van geen argumenten resulteert in een fout:

SELECT JSON_EXISTS();

Resultaat:

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

Het is hetzelfde als je te veel argumenten geeft:

SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);

Resultaat:

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

  1. ORA-24408:kan geen unieke servergroepsnaam genereren

  2. Zet postgres-datumweergave om in ISO 8601-tekenreeks

  3. Elke GROUP BY-expressie moet ten minste één kolom bevatten die geen buitenste verwijzing is

  4. SQL commando niet juist afgesloten?