Postgresql

Postgres 查詢以數組形式返回 JSON 對象鍵

  • December 4, 2019

是否可以在 PostgreSQL 中將 JSON 對象鍵作為值數組返回?

在 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(). 這將返回一個集合Object.keys(obj)- 與您所指的 JavaScript 函式不同,它返回一個數組。將集合提供給ARRAY建構子以對其進行轉換:

SELECT id, ARRAY(SELECT json_object_keys(obj)) AS keys
FROM   tbl_items;

jsonb_object_keys()用於jsonb.

這將返回每行的鍵數組(不是整個表)。

更詳細的形式是拼出一個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;

引用自:https://dba.stackexchange.com/questions/127228