JSONオブジェクトキーをPostgreSQLの値の配列として返すことはできますか?
JavaScriptでは、これは単にObject.keys(obj)
であり、文字列の配列を返します。
たとえば、次のようなテーブルがあるとします。
tbl_items
---------
id bigserial NOT NULL
obj json NOT NULL
そして、このような行がある場合:
id obj
----- -------------------------
123 '{"foo":1,"bar":2}'
返すクエリを作成するにはどうすればよいですか。
id keys
----- ------------------
123 '{"foo","bar"}'
もちろん、 json_object_keys()
を使用します。これは、setを返します-参照しているJavaScript関数Object.keys(obj)
とは異なり、array。セットを ARRAY
コンストラクタ にフィードして変換します。
_SELECT id, ARRAY(SELECT json_object_keys(obj)) AS keys
FROM tbl_items;
_
または、jsonb
に jsonb_object_keys()
を使用します。
これは、行ごとにキーの配列を返します(テーブル全体ではありません)。
より冗長な形式は、相関サブクエリの代わりにLATERAL
結合を綴ることです:
_SELECT t.id, k.keys
FROM tbl_items t
LEFT JOIN LATERAL (SELECT ARRAY(SELECT * FROM json_object_keys(t.obj)) AS keys) k ON true;
_