En MariaDB, JSON_LENGTH()
es una función integrada que devuelve la longitud de un documento JSON.
Cuando llama a esta función, proporciona el documento JSON como argumento. También puede proporcionar un argumento de ruta para devolver la longitud de un valor dentro del documento.
La longitud se determina de la siguiente manera:
- La longitud de un escalar siempre es 1.
- Si es una matriz, el número de elementos en la matriz.
- Si es un objeto, el número de miembros en el objeto.
La longitud de las matrices u objetos anidados no se cuenta.
Sintaxis
La sintaxis es así:
JSON_LENGTH(json_doc[, path])
Donde json_doc
es el documento JSON y path
es un argumento opcional que especifica una ruta dentro del documento.
Ejemplo
Aquí hay un ejemplo para demostrarlo.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Resultado:
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
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",
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_LENGTH(@json_document, '$.details');
Resultado:
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
Como se mencionó, no cuenta la longitud de los objetos anidados, por lo que obtenemos un resultado de 2
.
El siguiente ejemplo baja un nivel y cuenta la longitud de los awards
objeto:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_LENGTH(@json_document, '$.details.awards');
Resultado:
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
Escaleras
La longitud de un escalar siempre es 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Resultado:
+--------+ | Result | +--------+ | 1 | +--------+
Arreglos
Si el documento es una matriz, JSON_LENGTH()
cuenta el número de elementos en la matriz:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Resultado:
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
Rutas inexistentes
Pasar una ruta que no existe en el documento JSON da como resultado NULL
.
Ejemplo:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Resultado:
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Objetos vacíos
Si el objeto seleccionado está vacío, el resultado es 0
:
SELECT JSON_LENGTH('{}');
Resultado:
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Argumentos nulos
Si algún argumento es NULL
, el resultado es NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Resultado:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Recuento de parámetros incorrecto
No proporcionar argumentos da como resultado un error:
SELECT JSON_LENGTH();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'