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構造である場合、関数はより深いキーを返しません。
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;
各オブジェクトのキーリストを取得する場合の例を次に示します。
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
。