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

Explicación de MariaDB JSON_KEYS()

En MariaDB, JSON_KEYS() es una función integrada que devuelve una matriz de claves de nivel superior de un documento JSON. Si se proporciona una ruta, devuelve las claves de nivel superior de esa ruta.

Excluye claves de subobjetos anidados en el nivel especificado.

Además, si el objeto seleccionado está vacío, se devuelve una matriz vacía.

Sintaxis

La sintaxis es así:

JSON_KEYS(json_doc[, path])

Donde json_doc es el documento JSON y path es una ruta dentro del documento.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_KEYS(@json_document);

Resultado:

+----------------------------+
| JSON_KEYS(@json_document)  |
+----------------------------+
| ["name", "type", "weight"] |
+----------------------------+

Especificar una ruta

Aquí hay un ejemplo de cómo especificar una ruta dentro del documento:

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_KEYS(
    @json_document, 
    '$.details'
    ) AS Result;

Resultado:

+------------------------------+
| Result                       |
+------------------------------+
| ["type", "weight", "awards"] |
+------------------------------+

Como se mencionó, los subobjetos se excluyen del resultado.

Rutas inexistentes

Pasar una ruta que no existe en el documento JSON da como resultado NULL .

Ejemplo:

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_KEYS(
    @json_document, 
    '$.wrong'
    ) AS Result;

Resultado:

+--------+
| Result |
+--------+
| NULL   |
+--------+

Objetos vacíos

Si el objeto seleccionado está vacío, se devuelve una matriz vacía:

SELECT JSON_KEYS('{}');

Resultado:

+-----------------+
| JSON_KEYS('{}') |
+-----------------+
| []              |
+-----------------+

Argumentos nulos

Si algún argumento es NULL , el resultado es NULL :

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

Resultado:

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

Recuento de parámetros incorrecto

No proporcionar argumentos da como resultado un error:

SELECT JSON_KEYS();

Resultado:

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

Es lo mismo cuando proporciona muy pocos o demasiados argumentos:

SELECT JSON_KEYS('{ "a": 1}', 1, 2);

Resultado:

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