JSONsolo PostgreSQL

JSONB_EACH

Despliega un objeto JSON en filas: una fila por cada par clave–valor.

Sintaxis

JSONB_EACH(<objeto json>)
JSONB_EACH_TEXT(<objeto json>)

Devuelve dos columnas: key, el nombre de la clave, y value, su valor como jsonb o, en JSONB_EACH_TEXT, como texto. Útil cuando las claves no se conocen de antemano: ajustes, características de un producto, atributos arbitrarios.

Pares clave–valor
SELECT *
FROM JSONB_EACH('{"color": "black", "storage": 256, "wireless": true}');
keyvalue
colorblack
storage256
wirelesstrue
Valores como texto, para filtrar
SELECT key
FROM JSONB_EACH_TEXT('{"color": "black", "storage": 256, "wireless": true}')
WHERE value = 'black';
key
color

Con el JSONB_EACH normal, la comparación value = 'black' daría error: ahí value es jsonb.

Ten en cuenta

Solo para objetos: un array da el error cannot call jsonb_each on a non-object.

En JSONB_EACH, value es jsonb, así que WHERE value = 'black' da invalid input syntax for type json. Para texto, usa JSONB_EACH_TEXT.

Los objetos anidados no se despliegan: el valor es todo el objeto anidado. Para bajar un nivel, vuelve a llamar a JSONB_EACH sobre él.