Получить элементы в виде плоской строки из массива jsonb в postgresql - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть столбец x с типом данных jsonb

, и значения выглядят следующим образом:

[
{"key": "6cd", "type": "text1", "label": "label_text_1", "content": "description"},
{"key": "815", "type": "text2", "label": "label_text_2", "content": "desc2"}
]

Как вернуть массив строк, который содержит все элементы сЗапрос Postgres?

Примерно так:

["6cd", "text1", "label_text_1", "description", "815", "text2", "label_text_2""DESC2"]

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018
select array_agg(value) from t
join lateral jsonb_array_elements(col) e(v)
on true 
join lateral jsonb_each_text(v)
on true
0 голосов
/ 26 сентября 2018

Используйте jsonb_array_elements(json_column) для получения элементов массива и jsonb_each_text(elem) для получения значений всех вложенных объектов в этих элементах:

with my_table(id, json_column) as (
values(
    1, 
    '[
        {"key": "6cd", "type": "text1", "label": "label_text_1", "content": "description"},
        {"key": "815", "type": "text2", "label": "label_text_2", "content": "desc2"}
    ]'::jsonb)
)

select id, array_agg(val)
from my_table
cross join jsonb_array_elements(json_column) as a(elem)
cross join jsonb_each_text(elem) as e(key, val)
group by id

 id |                             array_agg                             
----+-------------------------------------------------------------------
  1 | {6cd,text1,label_text_1,description,815,text2,label_text_2,desc2}
(1 row) 
...