В MariaDB, JSON_TYPE()
е вградена функция, която връща типа на JSON стойност като низ.
Синтаксис
Синтаксисът е така:
JSON_TYPE(json_val)
Където json_val
е стойността, за която да се върне типа.
Типове обекти
Възможните типове връщане са изброени в следната таблица:
Тип връщане | Стойност | Пример |
---|---|---|
ARRAY | JSON масив. | [1, 2, 3] |
OBJECT | JSON обект. | {"a":"1"} |
BOOLEAN | JSON true/false литерал. | true или false |
DOUBLE | Число с поне един десетичен знак с плаваща запетая. | 1.2 |
INTEGER | Число без десетичен знак с плаваща запетая. | 1 |
NULL | JSON null буквално. Това се връща като низ и не трябва да се бърка с SQL NULL стойност. | null |
STRING | JSON низ. | "bird" |
Пример
Ето пример за демонстрация.
SET @json = '
{
"name" : "Fluffy",
"type" : "Cat"
}
';
SELECT JSON_TYPE(@json);
Резултат:
+------------------+ | JSON_TYPE(@json) | +------------------+ | OBJECT | +------------------+
В този пример предадох цял JSON документ, който има тип OBJECT
.
Ето още примери:
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"');
Резултат (с помощта на вертикален изход):
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
Извличане на стойността от JSON документ
В предишните примери предадох всяка стойност директно на функцията като литерал.
Можем да комбинираме JSON_TYPE()
с други функции, като JSON_EXTRACT()
за да разберете типа на стойност в по-голям JSON документ. Ето пример за извличане на стойност от JSON документ, за да разберете неговия тип:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT
JSON_TYPE(JSON_EXTRACT(@json, '$.name')) AS Result;
Резултат:
+--------+ | Result | +--------+ | STRING | +--------+
Ето още един пример, който връща повече типове:
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;
Резултат:
+--------+-------+---------+--------+------+---------+ | a | b | c | d | e | f | +--------+-------+---------+--------+------+---------+ | STRING | ARRAY | INTEGER | DOUBLE | NULL | INTEGER | +--------+-------+---------+--------+------+---------+
Нулев аргумент
Ако аргументът е null
, след това null
се връща.
SELECT JSON_TYPE(null);
Резултат:
+-----------------+ | JSON_TYPE(null) | +-----------------+ | NULL | +-----------------+
Неправилен брой параметри
Извикване на JSON_TYPE()
без аргумент води до грешка:
SELECT JSON_TYPE();
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'
Същото е, когато се предават твърде много аргументи:
SELECT JSON_TYPE(1, 2);
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'