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'