SmartQueryРазбор по существуРежимы по кругу: Система, Светлая, Тёмная. Enter или пробел переключают режим. Стрелки выбирают соседний, Home — Система, End — Тёмная.
Базы данных

PostgreSQL: длина JSON-массива

Выберите функцию по типу данных: json_array_length для json, jsonb_array_length для jsonb. Если массив вложен в объект, сначала извлеките его оператором ->, который сохраняет JSON-значение.

Минимальный запрос

SELECT json_array_length(
  '{"numbers": [1, 2, 3, 4, 5]}'::json -> 'numbers'
) AS count;
-- 5

SELECT jsonb_array_length('[1, 2, null]'::jsonb);
-- 3

JSON null внутри массива — элемент и входит в длину. Функция не считает рекурсивно содержимое вложенных массивов: [[1,2],[3]] имеет длину2.

Если поле бывает другого типа

SELECT CASE
  WHEN jsonb_typeof(data -> 'numbers') = 'array'
  THEN jsonb_array_length(data -> 'numbers')
  ELSE NULL
END AS count
FROM my_table;

Здесь data — столбец jsonb. Поле с объектом или JSON null не следует передавать функции как массив. Отсутствующий ключ возвращает SQL NULL; это отличается от пустого массива с длиной0. Решение, превращать ли отсутствие в0, должно следовать смыслу данных.

Проверка

Используйте случаи [], [1], вложенный массив, отсутствующее поле и неверный тип. Если нужны элементы для обработки, функции json[b]_array_elements решают другую задачу; для длины не нужно разворачивать весь массив в строки вручную.

Документация