Как я могу получить все ключи из столбца JSON в Postgres?
Если у меня есть таблица с столбцом с именем json_stuff
, и у меня есть две строки с
{ "things": "stuff" }
и { "more_things": "more_stuff" }
в столбце json_stuff
, какой запрос я могу сделать в таблице для получения [ things, more_things ]
в результате?
Ответы
Ответ 1
Используйте это:
select jsonb_object_keys(json_stuff) from table;
(Или просто json_object_keys
, если вы используете только json.)
Документация PostgreSQL json неплохая. Посмотрите.
И как указано в документации, функция получает только внешние ключи. Поэтому, если данные представляют собой вложенную структуру json, функция не вернет ни один из более глубоких ключей.
Ответ 2
WITH t(json_stuff) AS ( VALUES
('{"things": "stuff"}'::JSON),
('{"more_things": "more_stuff"}'::JSON)
)
SELECT array_agg(stuff.key) result
FROM t, json_each(t.json_stuff) stuff;
Ответ 3
Вот пример, если вы хотите получить список ключей каждого объекта:
select array_agg(json_keys),id from (
select json_object_keys(json_stuff) as json_keys,id from table) a group by a.id
Здесь id
- это идентификатор или уникальное значение каждой строки. Если строку нельзя отличить по идентификатору, возможно, лучше попробовать PL/pgSQL
.