从postgres表中选择所有现有的json字段

时间:2015-11-02 15:32:21

标签: sql json postgresql

在我的表mytable中,我有一个名为data的json字段,我插入了带有很多键和json的json。值。

我知道可以像这样选择单个字段:

SELECT data->'mykey' as mykey from mytable

但是如何在一定深度上概述所有json键?我本来期待像

这样的东西
SELECT data->* from mytable

但这不起作用。有类似的东西吗?

1 个答案:

答案 0 :(得分:3)

您可以使用json_object_keys() function获取json值的所有顶级键:

SELECT keys.* 
FROM mytable, json_object_keys(mytable.data) AS keys (mykey);

如果您想要更深层次的搜索,请先使用json运算符从#>值中提取更深层次:

SELECT keys.* 
FROM mytable, json_object_keys(mytable.data #> '{level1, level2}') AS keys (mykey);

请注意,该函数返回set of text,因此您应该将该函数作为行源调用。

如果您使用的是jsonb数据类型,请使用jsonb_object_keys()功能。