Последнее обновление
JSON_ARRAY_IGNORE_NULL
Описание
Формирует массив JSON, содержащий указанные элементы. Если параметры не переданы, возвращает пустой массив.
Синтаксис
JSON_ARRAY_IGNORE_NULL([<expression>, ...])
Параметры
Переменное число параметров:
<expression>: Элементы, которые нужно включить в массив JSON. Можно передать одно или несколько значений разных типов, включая NULL.
Возвращаемое значение
JSON: Возвращает массив JSON, состоящий из значений, переданных в списке параметров.
Примечания по использованию
- Реализация JSON_ARRAY_IGNORE_NULL преобразует параметры разных типов в значения JSON, неявно вызывая функцию
TO_JSON, поэтому параметры должны иметь типы, поддерживаемые функциейTO_JSON. - Значения NULL игнорируются. Если же требуется сохранить значения null в массиве, можно использовать функцию
JSON_ARRAY. - Если тип параметра не поддерживается функцией
TO_JSON, возникнет ошибка. Сначала можно преобразовать этот параметр в тип String, например:select JSON_ARRAY_IGNORE_NULL(CAST(NOW() as String));Функция NOW() возвращает значение типа DateTime, которое необходимо преобразовать в тип String с помощью функции CAST
- Если параметр представляет собой строку JSON и вы хотите добавить её в массив как объект JSON, следует явно вызвать функцию
JSON_PARSE, чтобы разобрать строку как объект JSON:select JSON_ARRAY_IGNORE_NULL(JSON_PARSE('{"key": "value"}'));
Примеры
-
Обычные параметры
select json_array_ignore_null() as empty_array, json_array_ignore_null(1) v1, json_array_ignore_null(1, 'abc') v2;+-------------+------+-----------+
| empty_array | v1 | v2 |
+-------------+------+-----------+
| [] | [1] | [1,"abc"] |
+-------------+------+-----------+ -
Параметры NULL
select json_array_ignore_null(null) v1, json_array_ignore_null(1, null, 'I am a string') v2;+------+---------------------+
| v1 | v2 |
+------+---------------------+
| [] | [1,"I am a string"] |
+------+---------------------+ -
Неподдерживаемые типы параметров
select json_array_ignore_null('item1', map(123, 'abc'));ERROR 1105 (HY000): errCode = 2, detailMessage = Can not find the compatibility function signature: to_json(MAP<TINYINT,VARCHAR(3)>) -
Параметры типа Map можно явно преобразовать в JSON
select json_array_ignore_null(1, cast(map('key', 'value') as json));+--------------------------------------------------------------+
| json_array_ignore_null(1, cast(map('key', 'value') as json)) |
+--------------------------------------------------------------+
| [1,{"key":"value"}] |
+--------------------------------------------------------------+ -
Строки JSON можно разобрать с помощью
json_parseselect json_array_ignore_null(json_parse('{"key1": "value", "key2": [1, "I am a string", 3]}'));+------------------------------------------------------------------------------------------+
| json_array_ignore_null(json_parse('{"key1": "value", "key2": [1, "I am a string", 3]}')) |
+------------------------------------------------------------------------------------------+
| [{"key1":"value","key2":[1,"I am a string",3]}] |
+------------------------------------------------------------------------------------------+