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'