在我的表mytable
中,我有一个名为data
的json字段,我插入了带有很多键和json的json。值。
我知道可以像这样选择单个字段:
SELECT data->'mykey' as mykey from mytable
但是如何在一定深度上概述所有json键?我本来期待像
这样的东西SELECT data->* from mytable
但这不起作用。有类似的东西吗?
答案 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()
功能。