Dans MariaDB, JSON_LENGTH()
est une fonction intégrée qui renvoie la longueur d'un document JSON.
Lorsque vous appelez cette fonction, vous fournissez le document JSON comme argument. Vous pouvez également fournir un argument de chemin pour renvoyer la longueur d'une valeur dans le document.
La longueur est déterminée comme suit :
- La longueur d'un scalaire est toujours de 1.
- Si un tableau, le nombre d'éléments dans le tableau.
- S'il s'agit d'un objet, le nombre de membres dans l'objet.
La longueur des tableaux ou des objets imbriqués n'est pas comptée.
Syntaxe
La syntaxe ressemble à ceci :
JSON_LENGTH(json_doc[, path])
Où json_doc
est le document JSON, et path
est un argument facultatif qui spécifie un chemin dans le document.
Exemple
Voici un exemple pour illustrer.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Résultat :
+-----------------------------+ | JSON_LENGTH(@json_document) | +-----------------------------+ | 3 | +-----------------------------+
Spécifier un chemin
Voici un exemple de spécification d'un chemin dans le document :
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');
Résultat :
+------------------------------------------+ | JSON_LENGTH(@json_document, '$.details') | +------------------------------------------+ | 2 | +------------------------------------------+
Comme mentionné, il ne compte pas la longueur des objets imbriqués, nous obtenons donc un résultat de 2
.
L'exemple suivant descend d'un niveau et compte la longueur des awards
objet :
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');
Résultat :
+-------------------------------------------------+ | JSON_LENGTH(@json_document, '$.details.awards') | +-------------------------------------------------+ | 3 | +-------------------------------------------------+
Scalaires
La longueur d'un scalaire est toujours 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+
Tableaux
Si le document est un tableau, JSON_LENGTH()
compte le nombre d'éléments dans le tableau :
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Résultat :
+-----------------------------------------+ | JSON_LENGTH(@json_document, '$.scores') | +-----------------------------------------+ | 5 | +-----------------------------------------+
Chemins inexistants
Passer un chemin qui n'existe pas dans le document JSON donne NULL
.
Exemple :
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Résultat :
+---------------------------------------+ | JSON_LENGTH(@json_document, '$.oops') | +---------------------------------------+ | NULL | +---------------------------------------+
Objets vides
Si l'objet sélectionné est vide, le résultat est 0
:
SELECT JSON_LENGTH('{}');
Résultat :
+-------------------+ | JSON_LENGTH('{}') | +-------------------+ | 0 | +-------------------+
Arguments nuls
Si un argument est NULL
, le résultat est NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Résultat :
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Nombre de paramètres incorrect
Ne fournir aucun argument génère une erreur :
SELECT JSON_LENGTH();
Résultat :
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'