[英]Get only few properties from Postgres JSON column
I have stored JSON
data as TEXT
in PostgreSQL column.我已将JSON
数据作为TEXT
存储在 PostgreSQL 列中。 Below is the format:下面是格式:
{"employee":[{"name":"Sunil","ph":["90","23"],"age":34},
{"name":"Abhi","ph":["91","24"],"age":36},
{"name":"Arnav","ph":["95","26"],"age":36}],
"student":[{"name":"Anil","ph":["93","26"],"age":34}],
"Admin":{"name":"Admin","ph":["90","23"],"age":36}}
Out of these properties i want to select only few fields and i am looking something like在这些属性中,我想 select 只有几个字段,我看起来像
select (value::jsonb,['name','age']) as jsondata from details where c.details_id =5
And output like:和 output 一样:
{"employee":[{"name":"Sunil","age":34},{"name":"Abhi","age":36},{"name":"Arnav","age":36}],"student":[{"name":"Anil","age":34}],"Admin":{"name":"Admin","age":36}}
There are multiple fields in the JSON
array but I want to select only these two. JSON
数组中有多个字段,但我只想 select 这两个字段。 Similar to skip_nulls
I am looking for something like retain_only(jsondata,['name','age'])
.类似于skip_nulls
我正在寻找类似retain_only(jsondata,['name','age'])
东西。
You can use jsonb_object_agg
with a cross join
:您可以将jsonb_object_agg
与cross join
一起使用:
select jsonb_object_agg(v.key, case when jsonb_typeof(v.value) = 'object'
then jsonb_build_object('name', v.value -> 'name', 'age', v.value -> 'age')
else (select jsonb_agg(jsonb_build_object('name', v1.value -> 'name',
'age', v1.value -> 'age'))
from jsonb_array_elements(v.value) v1) end)
from tbl t cross join jsonb_each(t.js::jsonb) v
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.