Как я могу получить все ключи из столбца 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.