PostgreSQL 嵌套 JSON 查询

Posted

技术标签:

【中文标题】PostgreSQL 嵌套 JSON 查询【英文标题】:PostgreSQL Nested JSON Querying 【发布时间】:2014-09-16 15:16:18 【问题描述】:

在 PostgreSQL 9.3.4 上,我有一个名为“person”的 JSON 类型列,其中存储的数据格式为 dogs: [breed: <>, name: <>, breed: <>, name: <>]。我想在索引 0 处检索狗的品种。这是我运行的两个查询:

不起作用

db=> select person->'dogs'->>0->'breed' from people where id = 77;
ERROR:  operator does not exist: text -> unknown
LINE 1: select person->'dogs'->>0->'bree...
                                 ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

作品

select (person->'dogs'->>0)::json->'breed' from es_config_app_solutiondraft where id = 77;
 ?column?
-----------
 "westie"
(1 row)

为什么需要类型转换?不是效率低吗?我做错了什么还是对 postgres JSON 支持有必要?

【问题讨论】:

【参考方案1】:

这是因为运算符->> 将 JSON 数组元素作为文本获取。您需要强制转换将其结果转换回 JSON。

您可以使用运算符-> 消除这种多余的演员阵容:

select person->'dogs'->0->'breed' from people where id = 77;

【讨论】:

别忘了查看 PG postgresql.org/docs/current/static/functions-json.html 支持的 JSON 运算符的完整列表 如果您需要所有品种的列表怎么办?是否支持select person->'dogs'->*->'breed' @mga,参见json_array_elements 函数。 select dog->'breed' from people p, json_array_elements(p->'dogs') dog

以上是关于PostgreSQL 嵌套 JSON 查询的主要内容,如果未能解决你的问题,请参考以下文章

将新的键/值对添加到 PostgreSQL JSON 列内的嵌套数组中

如何创建一个结构连接行作为嵌套文档 PostgreSQL

php,json_encode,嵌套数组,带有一个“左连接”查询

将嵌套的 JSON 从 PostgreSQL 的多对多连接表返回到 node.js

如何在Postgresql中按嵌套数组的重复值分组?

Redshift Postgresql - 如何解析嵌套的 JSON