Dans MariaDB, JSON_TYPE()
est une fonction intégrée qui renvoie le type d'une valeur JSON, sous forme de chaîne.
Syntaxe
La syntaxe ressemble à ceci :
JSON_TYPE(json_val)
Où json_val
est la valeur pour laquelle renvoyer le type.
Types d'objets
Les types de retour possibles sont répertoriés dans le tableau suivant :
Type de retour | Valeur | Exemple |
---|---|---|
ARRAY | Tableau JSON. | [1, 2, 3] |
OBJECT | Objet JSON. | {"a":"1"} |
BOOLEAN | JSON vrai/faux littéral. | true ou false |
DOUBLE | Un nombre avec au moins une décimale à virgule flottante. | 1.2 |
INTEGER | Un nombre sans décimale à virgule flottante. | 1 |
NULL | JSON null littéral. Ceci est renvoyé sous forme de chaîne et ne doit pas être confondu avec le SQL NULL valeur. | null |
STRING | Chaîne JSON. | "bird" |
Exemple
Voici un exemple pour illustrer.
SET @json = '
{
"name" : "Fluffy",
"type" : "Cat"
}
';
SELECT JSON_TYPE(@json);
Résultat :
+------------------+ | JSON_TYPE(@json) | +------------------+ | OBJECT | +------------------+
Dans cet exemple, j'ai passé un document JSON entier, qui a un type de OBJECT
.
Voici d'autres exemples :
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"');
Résultat (en utilisant la sortie 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
Extraire la valeur d'un document JSON
Dans les exemples précédents, j'ai passé chaque valeur directement à la fonction en tant que littéral.
Nous pouvons combiner JSON_TYPE()
avec d'autres fonctions, telles que JSON_EXTRACT()
pour connaître le type d'une valeur dans un document JSON plus volumineux. Voici un exemple d'extraction d'une valeur d'un document JSON afin de connaître son type :
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT
JSON_TYPE(JSON_EXTRACT(@json, '$.name')) AS Result;
Résultat :
+--------+ | Result | +--------+ | STRING | +--------+
Voici un autre exemple qui renvoie plus de types :
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;
Résultat :
+--------+-------+---------+--------+------+---------+ | a | b | c | d | e | f | +--------+-------+---------+--------+------+---------+ | STRING | ARRAY | INTEGER | DOUBLE | NULL | INTEGER | +--------+-------+---------+--------+------+---------+
Argument nul
Si l'argument est null
, puis null
est renvoyé.
SELECT JSON_TYPE(null);
Résultat :
+-----------------+ | JSON_TYPE(null) | +-----------------+ | NULL | +-----------------+
Nombre de paramètres incorrect
Appel de JSON_TYPE()
sans argument génère une erreur :
SELECT JSON_TYPE();
Résultat :
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'
Il en est de même lorsque trop d'arguments sont passés :
SELECT JSON_TYPE(1, 2);
Résultat :
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'