Перейти к содержимому
Последнее обновление

JSON_ARRAY

Описание​

Создаёт массив JSON, содержащий указанные элементы. Возвращает пустой массив, если параметры не переданы.

Синтаксис​

JSON_ARRAY([<expression>, ...]) 

Параметры​

Переменное число параметров:​

  • <expression>: Элементы, которые нужно включить в массив JSON. Можно указать одно или несколько значений разных типов, включая NULL.

Возвращаемое значение​

JSON: Возвращает массив JSON, составленный из списка параметров.

Примечания по использованию​

  • Реализация JSON_ARRAY преобразует параметры разных типов в значения JSON, неявно вызывая функцию TO_JSON, поэтому типы параметров должны поддерживаться функцией TO_JSON
  • NULL преобразуется в JSON null. Если вы не хотите сохранять значения null в массиве, можно использовать функцию JSON_ARRAY_IGNORE_NULL.
  • Если тип параметра не поддерживается функцией TO_JSON, возникнет ошибка. Сначала можно преобразовать этот параметр в тип String, например:
    select JSON_ARRAY(CAST(NOW() as String));

    Функция NOW() возвращает значение типа DateTime, которое необходимо преобразовать в тип String с помощью функции CAST

  • Если параметр представляет собой строку JSON и вы хотите добавить её в массив как объект JSON, следует явно вызвать функцию JSON_PARSE, чтобы разобрать строку в объект JSON:
    select JSON_ARRAY(JSON_PARSE('{"key": "value"}'));

Примеры​

  1. Обычные параметры
    select json_array() as empty_array, json_array(1) v1, json_array(1, 'abc') v2;
    +-------------+------+-----------+
    | empty_array | v1 | v2 |
    +-------------+------+-----------+
    | [] | [1] | [1,"abc"] |
    +-------------+------+-----------+
  2. Параметры NULL
    select json_array(null) v1, json_array(1, null, 'I am a string') v2;
    +--------+--------------------------+
    | v1 | v2 |
    +--------+--------------------------+
    | [null] | [1,null,"I am a string"] |
    +--------+--------------------------+
  3. Неподдерживаемые типы параметров
    select json_array('item1', map(123, 'abc'));
    ERROR 1105 (HY000): errCode = 2, detailMessage = Can not find the compatibility function signature: to_json(MAP<TINYINT,VARCHAR(3)>)
  4. Параметры типа Map можно явно преобразовать в JSON
    select json_array(1, cast(map('key', 'value') as json));
    +--------------------------------------------------+
    | json_array(1, cast(map('key', 'value') as json)) |
    +--------------------------------------------------+
    | [1,{"key":"value"}] |
    +--------------------------------------------------+
  5. Строка JSON будет добавлена в массив в виде строки
    select json_array('{"key1": "value", "key2": [1, "I am a string", 3]}');
    +------------------------------------------------------------------+
    | json_array('{"key1": "value", "key2": [1, "I am a string", 3]}') |
    +------------------------------------------------------------------+
    | ["{\"key1\": \"value\", \"key2\": [1, \"I am a string\", 3]}"] |
    +------------------------------------------------------------------+
  6. Строку JSON можно разобрать с помощью json_parse, а затем передать в json_array
    select json_array(json_parse('{"key1": "value", "key2": [1, "I am a string", 3]}'));
    +------------------------------------------------------------------------------+
    | json_array(json_parse('{"key1": "value", "key2": [1, "I am a string", 3]}')) |
    +------------------------------------------------------------------------------+
    | [{"key1":"value","key2":[1,"I am a string",3]}] |
    +------------------------------------------------------------------------------+