I MariaDB, JSON_TYPE()
er en indbygget funktion, der returnerer typen af en JSON-værdi som en streng.
Syntaks
Syntaksen ser sådan ud:
JSON_TYPE(json_val)
Hvor json_val
er den værdi, som typen skal returneres for.
Objekttyper
De mulige returtyper er angivet i følgende tabel:
Returtype | Værdi | Eksempel |
---|---|---|
ARRAY | JSON-array. | [1, 2, 3] |
OBJECT | JSON-objekt. | {"a":"1"} |
BOOLEAN | JSON sand/falsk bogstavelig. | true eller false |
DOUBLE | Et tal med mindst én decimal med flydende decimal. | 1.2 |
INTEGER | Et tal uden en flydende decimal. | 1 |
NULL | JSON null bogstavelig. Dette returneres som en streng og må ikke forveksles med SQL NULL værdi. | null |
STRING | JSON-streng. | "bird" |
Eksempel
Her er et eksempel til at demonstrere.
SET @json = '
{
"name" : "Fluffy",
"type" : "Cat"
}
';
SELECT JSON_TYPE(@json);
Resultat:
+------------------+ | JSON_TYPE(@json) | +------------------+ | OBJECT | +------------------+
I dette eksempel har jeg bestået et helt JSON-dokument, som har en type OBJECT
.
Her er flere eksempler:
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"');
Resultat (ved hjælp af lodret output):
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
Udtræk værdien fra et JSON-dokument
I de foregående eksempler sendte jeg hver værdi direkte til funktionen som en bogstavelig.
Vi kan kombinere JSON_TYPE()
med andre funktioner, såsom JSON_EXTRACT()
for at finde ud af typen af en værdi i et større JSON-dokument. Her er et eksempel på at udtrække en værdi fra et JSON-dokument for at finde ud af dets type:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT
JSON_TYPE(JSON_EXTRACT(@json, '$.name')) AS Result;
Resultat:
+--------+ | Result | +--------+ | STRING | +--------+
Her er et andet eksempel, der returnerer flere typer:
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;
Resultat:
+--------+-------+---------+--------+------+---------+ | a | b | c | d | e | f | +--------+-------+---------+--------+------+---------+ | STRING | ARRAY | INTEGER | DOUBLE | NULL | INTEGER | +--------+-------+---------+--------+------+---------+
Nul-argument
Hvis argumentet er null
, derefter null
er returneret.
SELECT JSON_TYPE(null);
Resultat:
+-----------------+ | JSON_TYPE(null) | +-----------------+ | NULL | +-----------------+
Forkert parameterantal
Kalder JSON_TYPE()
uden et argument resulterer i en fejl:
SELECT JSON_TYPE();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'
Det er det samme, når der sendes for mange argumenter:
SELECT JSON_TYPE(1, 2);
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'