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'