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 列内的嵌套数组中
php,json_encode,嵌套数组,带有一个“左连接”查询