En MariaDB, JSON_TYPE()
es una función integrada que devuelve el tipo de un valor JSON, como una cadena.
Sintaxis
La sintaxis es así:
JSON_TYPE(json_val)
Donde json_val
es el valor para el que devolver el tipo.
Tipos de objetos
Los posibles tipos de devolución se enumeran en la siguiente tabla:
Tipo de devolución | Valor | Ejemplo |
---|---|---|
ARRAY | matriz JSON. | [1, 2, 3] |
OBJECT | Objeto JSON. | {"a":"1"} |
BOOLEAN | JSON literal verdadero/falso. | true o false |
DOUBLE | Un número con al menos un punto decimal flotante. | 1.2 |
INTEGER | Un número sin coma flotante decimal. | 1 |
NULL | JSON null literal. Esto se devuelve como una cadena y no debe confundirse con SQL NULL valor. | null |
STRING | Cadena JSON. | "bird" |
Ejemplo
Aquí hay un ejemplo para demostrarlo.
SET @json = '
{
"name" : "Fluffy",
"type" : "Cat"
}
';
SELECT JSON_TYPE(@json);
Resultado:
+------------------+ | JSON_TYPE(@json) | +------------------+ | OBJECT | +------------------+
En este ejemplo, pasé un documento JSON completo, que tiene un tipo de OBJECT
.
Aquí hay más ejemplos:
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 salida 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
Extraer el valor de un documento JSON
En los ejemplos anteriores, pasé cada valor directamente a la función como un literal.
Podemos combinar JSON_TYPE()
con otras funciones, como JSON_EXTRACT()
para averiguar el tipo de un valor dentro de un documento JSON más grande. Aquí hay un ejemplo de cómo extraer un valor de un documento JSON para averiguar su tipo:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT
JSON_TYPE(JSON_EXTRACT(@json, '$.name')) AS Result;
Resultado:
+--------+ | Result | +--------+ | STRING | +--------+
Aquí hay otro ejemplo que devuelve más 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
Si el argumento es null
, luego null
es devuelto.
SELECT JSON_TYPE(null);
Resultado:
+-----------------+ | JSON_TYPE(null) | +-----------------+ | NULL | +-----------------+
Recuento de parámetros incorrecto
Llamando a JSON_TYPE()
sin un argumento da como resultado un error:
SELECT JSON_TYPE();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'
Es lo mismo cuando se pasan demasiados argumentos:
SELECT JSON_TYPE(1, 2);
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'