->
Конструкция SQL
Аналог в MySQL:
Достаёт из JSON значение по ключу объекта или номеру элемента массива и возвращает его как JSON.
PostgreSQL 17.5
json -> key
json -> indexПараметры
- jsonjson | jsonb
- Значение типа json или jsonb
- keytext
- Ключ объекта
- indexinteger
- Номер элемента массива, начиная с 0; отрицательный отсчитывается с конца
Возвращаемое значение
Значение json или jsonb; NULL, если ключа или элемента нет
Примеры
Вложенный объект
PostgreSQL 17.5
SELECT '{"user": {"name": "Ann", "tags": ["sql", "pg"]}}'::jsonb->'user' AS user_json;Цепочка операторов и элемент с конца
PostgreSQL 17.5
SELECT '{"user": {"name": "Ann", "tags": ["sql", "pg"]}}'::jsonb->'user'->'tags'->0 AS first_tag,
'[10, 20, 30]'::jsonb->-1 AS last_element;Промокод из данных события
PostgreSQL 17.5
SELECT event_id,
event_name,
metadata->'promo_code' AS promo_code
FROM events
LIMIT 5;Подробности
Результат остаётся JSON, поэтому операторы можно соединять в цепочку: data -> 'user' -> 'tags' -> 0. На последнем шаге, когда нужен обычный текст, используют ->>.
Если ключа нет, результат NULL, а не ошибка. Строку с JSON нужно явно привести к типу: '{...}'::jsonb.