sql >> Base de Datos >  >> RDS >> MariaDB

Explicación de MariaDB JSON_EXISTS()

En MariaDB, JSON_EXISTS() es una función integrada que le permite verificar si existe un valor en una ruta específica en el documento JSON.

Acepta el documento JSON como argumento y devuelve 1 si se encuentra la ruta, y 0 si no lo es.

La documentación de MariaDB establece que la función "determina si existe un valor JSON específico en los datos dados". Sin embargo, la función en realidad no parece verificar un valor dado. Probablemente sea más exacto decir que determina si una ruta específica existe, o que existe un valor en la ruta especificada.

Para comprobar que el valor real existe, puede usar JSON_CONTAINS() función.

Sintaxis

La sintaxis es así:

JSON_EXISTS(json_doc, path)

Donde json_doc es el documento JSON y path es el camino a encontrar.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

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

Resultado:

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

En este caso, se encuentra la ruta y el resultado es 1 .

Si no se encuentra la ruta, el resultado es 0 , así:

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

Resultado:

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

Arreglos

En este ejemplo, verifico la existencia de un elemento en un índice dado de una matriz:

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

Resultado:

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

Esto es lo que sucede si el índice no existe en la matriz:

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

Resultado:

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

Documento JSON más grande

Aquí hay un ejemplo que usa un documento JSON un poco más grande. Aquí, busco una clave que existe dentro de varios niveles de anidamiento:

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;

Resultado:

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

Argumentos nulos

Si alguno de los argumentos es NULL , el resultado es NULL :

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

Resultado:

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

JSON no válido

Pasar JSON no válido da como resultado NULL :

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

Resultado:

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

Recuento de parámetros incorrecto

No proporcionar argumentos da como resultado un error:

SELECT JSON_EXISTS();

Resultado:

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

Es lo mismo cuando proporciona demasiados argumentos:

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

Resultado:

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