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

kad*_*ian 4 sql postgresql json

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

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

SELECT data->'mykey' as mykey from mytable
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能获得一定深度上所有 json 键的概览呢?我本来期望类似的东西

SELECT data->* from mytable
Run Code Online (Sandbox Code Playgroud)

但这行不通。有类似的东西吗?

Pat*_*ick 6

您可以使用该json_object_keys()函数获取某个值的所有顶级键json

SELECT keys.* 
FROM mytable, json_object_keys(mytable.data) AS keys (mykey);
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果您使用jsonb数据类型,则使用jsonb_object_keys()函数。