MariaDB
 sql >> Database >  >> RDS >> MariaDB

Spiegazione di MariaDB JSON_TYPE()

In MariaDB, JSON_TYPE() è una funzione incorporata che restituisce il tipo di un valore JSON, come stringa.

Sintassi

La sintassi è questa:

JSON_TYPE(json_val)

Dove json_val è il valore per il quale restituire il tipo.

Tipi di oggetto

I possibili tipi di reso sono elencati nella tabella seguente:

Tipo di reso Valore Esempio
ARRAY Matrice JSON. [1, 2, 3]
OBJECT Oggetto JSON. {"a":"1"}
BOOLEAN JSON vero/falso letterale. true o false
DOUBLE Un numero con almeno un decimale a virgola mobile. 1.2
INTEGER Un numero senza decimale a virgola mobile. 1
NULL JSON null letterale. Questa viene restituita come una stringa e non deve essere confusa con l'SQL NULL valore. null
STRING Stringa JSON. "bird"

Esempio

Ecco un esempio da dimostrare.

SET @json = '
    { 
        "name" : "Fluffy", 
        "type" : "Cat" 
    }
';

SELECT JSON_TYPE(@json);

Risultato:

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

In questo esempio ho passato un intero documento JSON, che ha un tipo di OBJECT .

Ecco altri esempi:

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"');

Risultato (usando l'output verticale):

    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

Estrai il valore da un documento JSON

Negli esempi precedenti, ho passato ogni valore direttamente alla funzione come valore letterale.

Possiamo combinare JSON_TYPE() con altre funzioni, come JSON_EXTRACT() per scoprire il tipo di un valore all'interno di un documento JSON più grande. Ecco un esempio di estrazione di un valore da un documento JSON per scoprirne il tipo:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

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

Risultato:

+--------+
| Result |
+--------+
| STRING |
+--------+

Ecco un altro esempio che restituisce più tipi:

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;

Risultato:

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

Argomento nullo

Se l'argomento è null , quindi null viene restituito.

SELECT JSON_TYPE(null);

Risultato:

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

Conteggio parametri errato

Chiamando JSON_TYPE() senza un argomento genera un errore:

SELECT JSON_TYPE();

Risultato:

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

È lo stesso quando vengono passati troppi argomenti:

SELECT JSON_TYPE(1, 2);

Risultato:

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