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

MariaDB JSON_TYPE() explicado

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'