JSONлише PostgreSQL

JSONB_EACH

Розгортає JSON-об'єкт у рядки — по рядку на кожну пару «ключ — значення».

Синтаксис

JSONB_EACH(<json-об'єкт>)
JSONB_EACH_TEXT(<json-об'єкт>)

Повертає два стовпці: key — назва ключа й value — його значення як jsonb, а в JSONB_EACH_TEXT — як текст. Зручно, коли ключі заздалегідь невідомі: налаштування, характеристики товару, довільні атрибути.

Пари ключ — значення
SELECT *
FROM JSONB_EACH('{"color": "black", "storage": 256, "wireless": true}');
keyvalue
colorblack
storage256
wirelesstrue
Значення текстом — щоб фільтрувати
SELECT key
FROM JSONB_EACH_TEXT('{"color": "black", "storage": 256, "wireless": true}')
WHERE value = 'black';
key
color

Зі звичайним JSONB_EACH порівняння value = 'black' дало б помилку: там value — це jsonb.

Зверни увагу

Лише для об'єктів: масив дасть помилку cannot call jsonb_each on a non-object.

value у JSONB_EACH — це jsonb, тож WHERE value = 'black' дасть invalid input syntax for type json. Для тексту бери JSONB_EACH_TEXT.

Вкладені об'єкти не розгортаються: значенням буде весь вкладений об'єкт. Щоб дістатися глибше, виклич JSONB_EACH ще раз для нього.