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

MariaDB JSON_TYPE() explicado


No MariaDB, JSON_TYPE() é uma função interna que retorna o tipo de um valor JSON, como uma string.

Sintaxe


A sintaxe fica assim:
JSON_TYPE(json_val)

Onde json_val é o valor para o qual retornar o tipo.

Tipos de objeto


Os tipos de retorno possíveis estão listados na tabela a seguir:
Tipo de retorno Valor Exemplo
ARRAY Matriz JSON. [1, 2, 3]
OBJECT Objeto JSON. {"a":"1"}
BOOLEAN JSON literal verdadeiro/falso. true ou false
DOUBLE Um número com pelo menos um ponto flutuante decimal. 1.2
INTEGER Um número sem um decimal de ponto flutuante. 1
NULL JSON null literal. Isso é retornado como uma string e não deve ser confundido com o SQL NULL valor. null
STRING String JSON. "bird"

Exemplo


Aqui está um exemplo para demonstrar.
SET @json = '
    { 
        "name" : "Fluffy", 
        "type" : "Cat" 
    }
';

SELECT JSON_TYPE(@json);

Resultado:
+------------------+
| JSON_TYPE(@json) |
+------------------+
| OBJECT           |
+------------------+

Neste exemplo eu passei um documento JSON inteiro, que tem um tipo de OBJECT .

Aqui estão mais exemplos:
SELECT 
    JSON_TYPE('[1, 2, 3]'),
    JSON_TYPE('{ "a" : 1 }'),
    JSON_TYPE('true'),
    JSON_TYPE('false'),
    JSON_TYPE(10.59),
    JSON_TYPE(10),
    JSON_TYPE(null),
    JSON_TYPE('"Fuzzy Smith"');

Resultado (usando saída vertical):
    JSON_TYPE('[1, 2, 3]'): ARRAY
  JSON_TYPE('{ "a" : 1 }'): OBJECT
         JSON_TYPE('true'): BOOLEAN
        JSON_TYPE('false'): BOOLEAN
          JSON_TYPE(10.59): DOUBLE
             JSON_TYPE(10): INTEGER
           JSON_TYPE(null): NULL
JSON_TYPE('"Fuzzy Smith"'): STRING

Extrair o valor de um documento JSON


Nos exemplos anteriores, passei cada valor diretamente para a função como um literal.

Podemos combinar JSON_TYPE() com outras funções, como JSON_EXTRACT() para descobrir o tipo de um valor em um documento JSON maior. Aqui está um exemplo de extração de um valor de um documento JSON para descobrir seu tipo:
SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT 
    JSON_TYPE(JSON_EXTRACT(@json, '$.name')) AS Result;

Resultado:
+--------+
| Result |
+--------+
| STRING |
+--------+

Aqui está outro exemplo que retorna mais tipos:
SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9],
        "weight" : 10.50,
        "height" : null,
        "age" : 4
    }
';

SELECT 
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.name')
        ) AS a,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.scores')
        ) AS b,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.scores[0]')
        ) AS c,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.weight')
        ) AS d,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.height')
        ) AS e,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.age')
        ) AS f;

Resultado:
+--------+-------+---------+--------+------+---------+
| a      | b     | c       | d      | e    | f       |
+--------+-------+---------+--------+------+---------+
| STRING | ARRAY | INTEGER | DOUBLE | NULL | INTEGER |
+--------+-------+---------+--------+------+---------+

Argumento nulo


Se o argumento for null , então null é devolvido.
SELECT JSON_TYPE(null);

Resultado:
+-----------------+
| JSON_TYPE(null) |
+-----------------+
| NULL            |
+-----------------+

Contagem de parâmetros incorreta


Chamando JSON_TYPE() sem um argumento resulta em um erro:
SELECT JSON_TYPE();

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

É o mesmo quando muitos argumentos são passados:
SELECT JSON_TYPE(1, 2);

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