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

Spiegazione di MariaDB JSON_EXISTS()

In MariaDB, JSON_EXISTS() è una funzione integrata che ti consente di verificare se esiste un valore in un percorso specificato nel documento JSON.

Accetta il documento JSON come argomento e restituisce 1 se viene trovato il percorso e 0 se non lo è.

La documentazione di MariaDB afferma che la funzione "determina se un valore JSON specificato esiste nei dati forniti". Tuttavia, la funzione in realtà non sembra verificare un determinato valore. Probabilmente è più preciso dire che determina se un percorso specificato esiste o che esiste un valore nel percorso specificato.

Per verificare che il valore effettivo esiste, puoi usare JSON_CONTAINS() funzione.

Sintassi

La sintassi è questa:

JSON_EXISTS(json_doc, path)

Dove json_doc è il documento JSON e il path è il percorso da trovare.

Esempio

Ecco un esempio da dimostrare.

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

Risultato:

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

In questo caso, il percorso viene trovato e il risultato è 1 .

Se il percorso non viene trovato, il risultato è 0 , in questo modo:

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

Risultato:

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

Array

In questo esempio, controllo l'esistenza di un elemento in un dato indice di un array:

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

Risultato:

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

Ecco cosa succede se l'indice non esiste nell'array:

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

Risultato:

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

Documento JSON più grande

Ecco un esempio che utilizza un documento JSON leggermente più grande. Qui, controllo una chiave che esiste all'interno di diversi livelli di annidamento:

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;

Risultato:

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

Argomenti nulli

Se uno qualsiasi degli argomenti è NULL , il risultato è NULL :

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

Risultato:

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

JSON non valido

Il passaggio di JSON non valido restituisce NULL :

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

Risultato:

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

Conteggio parametri errato

Non fornire argomenti genera un errore:

SELECT JSON_EXISTS();

Risultato:

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

È lo stesso quando fornisci troppi argomenti:

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

Risultato:

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