如何从Postgres中的JSON列获取所有键?

时间:2016-03-21 20:53:46

标签: json postgresql

如果我有一个名为json_stuff的列的表,并且我有两行

{ "things": "stuff" }{ "more_things": "more_stuff" }

在他们的json_stuff列中,我可以在整个表格中进行哪些查询以便接收[ things, more_things ]

3 个答案:

答案 0 :(得分:43)

使用此:

select jsonb_object_keys(json_stuff) from table;

(如果您只使用json,则只需json_object_keys。)

PostgreSQL json文档相当不错。 Take a look

正如文档中所述,该函数仅获取最外层的键。因此,如果数据是嵌套的json结构,则该函数不会返回任何更深的键。

答案 1 :(得分: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;

答案 2 :(得分:0)

以下是您要获取每个对象的键列表的示例:

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