Postgresql Postgres从jsonb数组中提取值
我有一个jsonb字段,其数组如下所示:Postgresql Postgres从jsonb数组中提取值,postgresql,postgresql-9.4,jsonb,Postgresql,Postgresql 9.4,Jsonb,我有一个jsonb字段,其数组如下所示: [ { "type":"discount", "title":"Discount 10%" }, { "file":"zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf", "type":"menu", "title":"Some menu tit
[
{
"type":"discount",
"title":"Discount 10%"
},
{
"file":"zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf",
"type":"menu",
"title":"Some menu title etc"
}
]
如果数组中有type=menu,我想获得文件属性
我设法做到的是知道是否有,但如何最终提取文件值
case when offers @> '[{"type":"menu"}]' then true else false end
我不想做下面这样的事情,因为数组可能不包含折扣类型
offers->1->'file'
使用
jsob\u array\u elements()
和->
运算符(请参阅。)
使用
jsob\u array\u elements()
和->
运算符(请参阅。)
例如:
例如:
试试
json\u array\u elements
。@VaoTsun不走运吗?试试json\u array\u elements
。@VaoTsun不走运吗?为什么要使用横向而不是普通的jsonb\u数组\u元素?返回行集的函数应该在FROM
子句中调用,横向连接是一种自然的方法。为什么要使用横向连接横向而不是普通的jsonb_数组_元素?返回行集的函数应该在FROM
子句中调用,横向连接是一种自然的方法。
with a_table(json_col) as (
values (
'[
{
"type":"discount",
"title":"Discount 10%"
},
{
"file":"zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf",
"type":"menu",
"title":"Some menu title etc"
}
]'::jsonb)
)
select value->>'file' as filename
from a_table,
lateral jsonb_array_elements(json_col)
where value->>'type' = 'menu'
filename
---------------------------------------------------------------------------------
zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf
(1 row)
t=# with a as (with v as (select '[
{
"type":"discount",
"title":"Discount 10%"
},
{
"file":"zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf",
"type":"menu",
"title":"Some menu title etc"
}
]'::jsonb j)
select jsonb_array_elements(j) r from v) select r->>'file' from a where r->>'type' = 'menu';
?column?
---------------------------------------------------------------------------------
zx5rP8EoacyfhqGndcSOnP8VYtkr9Ya8Nvf7oYL98YDsM1CLMYIurYvfVUU4AGkzBsovwssT0bq.pdf
(1 row)