Referencia de funciones

->

Construcción SQL
Equivalente en MySQL:

Extrae un valor de un JSON por una clave de objeto o un número de elemento de array y lo devuelve como JSON.

PostgreSQL 17.9
json -> key
json -> index
json
Valor de tipo json o jsonb
json | jsonb
key
Clave del objeto
text
index
Número del elemento del array desde 0; uno negativo cuenta desde el final
integer

Valor devuelto

Valor de tipo json o jsonb; NULL si no existe la clave o el elemento

Ejemplos

Objeto anidado

PostgreSQL 17.9
SELECT '{"user": {"name": "Ann", "tags": ["sql", "pg"]}}'::jsonb->'user' AS user_json;
user_json
{"name":"Ann","tags":["sql","pg"]}

Cadena de operadores y un elemento desde el final

PostgreSQL 17.9
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

Código promocional de los datos de un evento

PostgreSQL 17.9
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

Detalles

El resultado sigue siendo JSON, así que los operadores se pueden encadenar: data -> 'user' -> 'tags' -> 0. En el último paso, si necesitas texto simple, usa ->>.

Si la clave no existe, el resultado es NULL, no un error. Una cadena con JSON hay que convertirla explícitamente: '{...}'::jsonb.

Véase también