Справочник по функциям

->

Конструкция 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;
user_json
{"name":"Ann","tags":["sql","pg"]}

Цепочка операторов и элемент с конца

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;
first_taglast_element
sql30

Промокод из данных события

PostgreSQL 17.5
SELECT event_id,
	event_name,
	metadata->'promo_code' AS promo_code
FROM events
LIMIT 5;
event_idevent_namepromo_code
1app_openSUMMER20
2view_item<NULL>
3app_openNEWYEAR
4view_item<NULL>
5add_to_cartSUMMER20

Подробности

Результат остаётся JSON, поэтому операторы можно соединять в цепочку: data -> 'user' -> 'tags' -> 0. На последнем шаге, когда нужен обычный текст, используют ->>.

Если ключа нет, результат NULL, а не ошибка. Строку с JSON нужно явно привести к типу: '{...}'::jsonb.

Смотрите также