MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB JSON_LENGTH() explicado


No MariaDB, JSON_LENGTH() é uma função interna que retorna o comprimento de um documento JSON.

Ao chamar essa função, você fornece o documento JSON como argumento. Você também pode fornecer um argumento de caminho para retornar o comprimento de um valor dentro do documento.

O comprimento é determinado da seguinte forma:
  • O comprimento de um escalar é sempre 1.
  • Se for uma matriz, o número de elementos na matriz.
  • Se for um objeto, o número de membros no objeto.

O comprimento de matrizes ou objetos aninhados não são contados.

Sintaxe


A sintaxe fica assim:
JSON_LENGTH(json_doc[, path])

Onde json_doc é o documento JSON e path é um argumento opcional que especifica um caminho dentro do documento.

Exemplo


Aqui está um exemplo para demonstrar.
SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_LENGTH(@json_document);

Resultado:
+-----------------------------+
| JSON_LENGTH(@json_document) |
+-----------------------------+
|                           3 |
+-----------------------------+

Especificando um caminho


Aqui está um exemplo de especificação de um caminho dentro do 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 mencionado, ele não conta o comprimento de objetos aninhados, então obtemos um resultado de 2 .

O próximo exemplo desce um nível e conta a duração dos 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 |
+-------------------------------------------------+

Escalares


O comprimento de um escalar é sempre 1 :
SELECT JSON_LENGTH( 
    '{ "a" : 378, "b" : 45 }', 
    '$.a' 
    ) AS Result;

Resultado:
+--------+
| Result |
+--------+
|      1 |
+--------+

Matrizes


Se o documento for um array, JSON_LENGTH() conta o número de elementos no array:
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 |
+-----------------------------------------+

Caminhos inexistentes


Passar um caminho que não existe no documento JSON resulta em NULL .

Exemplo:
SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog"
    }
';
SELECT JSON_LENGTH(@json_document, '$.oops');

Resultado:
+---------------------------------------+
| JSON_LENGTH(@json_document, '$.oops') |
+---------------------------------------+
|                                  NULL |
+---------------------------------------+

Objetos Vazios


Se o objeto selecionado estiver vazio, o resultado será 0 :
SELECT JSON_LENGTH('{}');

Resultado:
+-------------------+
| JSON_LENGTH('{}') |
+-------------------+
|                 0 |
+-------------------+

Argumentos nulos


Se algum argumento for NULL , o resultado é 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 |
+------+------+------+

Contagem de parâmetros incorreta


Não fornecer argumentos resulta em um erro:
SELECT JSON_LENGTH();

Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'