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

Explicación de MariaDB JSON_LENGTH()

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'