web-dev-qa-db-ja.com

PostgresのJSON列からすべてのキーを取得するにはどうすればよいですか?

json_stuffという名前の列を持つテーブルがあり、2つの行がある場合

{ "things": "stuff" }および{ "more_things": "more_stuff" }

json_stuff列で、結果として[ things, more_things ]を受信するためにテーブル全体でどのクエリを作成できますか?

これを使って:

select jsonb_object_keys(json_stuff) from table;

(あるいは単に json_object_keys jsonだけを使用している場合。

PostgreSQL jsonのドキュメントは非常に優れています。 見てください

また、ドキュメントに記載されているように、関数は最も外側のキーのみを取得します。そのため、データがネストされたjson構造である場合、関数はより深いキーを返しません。

50
Sevanteri
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
Dmitry Savinkov

各オブジェクトのキーリストを取得する場合の例を次に示します。

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

0
natsuapo