如果我有一个名为json_stuff
的列的表,并且我有两行
{ "things": "stuff" }
和{ "more_things": "more_stuff" }
在他们的json_stuff
列中,我可以在整个表格中进行哪些查询以便接收[ things, more_things ]
?
答案 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
。