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

标签 sql json postgresql

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

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

SELECT data->'mykey' as mykey from mytable

但是我怎样才能得到某个深度的所有 json 键的概览呢?我本以为会是这样的

SELECT data->* from mytable

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

最佳答案

您可以使用 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);

请注意,该函数返回一组文本,因此您应该将该函数作为行源来调用。

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

关于sql - 从 postgres 表中选择所有现有的 json 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33481233/

相关文章:

sql - SQL 中的多个 LIKE 语句

SQL在表的两个副本之间留有WHERE子句依赖项的自联接

python - Pandas 与 JSON 库在 Python 中读取 JSON 文件

postgresql - 使用 Sequelize.js 和 Postgres 以代码优先的方式处理数据

postgresql - 对 tsvector 中的每个元素使用 Levenshtein 函数?

sql - 防止在 Postgres 中为特定查询使用索引

sql - 选择 Oracle 中第二小的值

SQL(sqlite)比较由另一个重复行分组的行的总和

json - Restkit 0.20 上的简单 JSON 登录帖子

java - Java 中使用 Map 的 JSON 解析器