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

ver*_*rus 36 postgresql json

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

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

在他们的json_stuff专栏中,我可以在表格中进行哪些查询以便接收[ things, more_things ]结果?

Sev*_*eri 56

用这个:

select jsonb_object_keys(json_stuff) from table;
Run Code Online (Sandbox Code Playgroud)

(或者就像json_object_keys你只使用json一样.)

PostgreSQL json文档相当不错.看一看.

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

  • @Cyber​​guille也有DISTINCT,就是为了这个目的。 (6认同)
  • 这个查询为你提供了所有的密钥,但是如果你真的需要获得所有可能的密钥而不重复这就是查询`select jsonb_object_keys(json_stuff)作为密钥从表group by key; (3认同)

Dmi*_*kov 7

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;
Run Code Online (Sandbox Code Playgroud)

  • 下次解释一下你应该回答什么。 (3认同)