MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

MariaDB JSON_LENGTH() expliqué

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])

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'