Arrays 将多个Json数组转换为单个数组,而不是父数组中的数组
我有以下两行JsonArrays 将多个Json数组转换为单个数组,而不是父数组中的数组,arrays,json,postgresql,postgresql-9.5,Arrays,Json,Postgresql,Postgresql 9.5,我有以下两行Json { "attributes": [{ "name": "text-1580797977710", "value": "Nikesh Niroula" }, { "name": "email-1580797979166", "value": "nikesh@gmail.com"
{
"attributes": [{
"name": "text-1580797977710",
"value": "Nikesh Niroula"
}, {
"name": "email-1580797979166",
"value": "nikesh@gmail.com"
}]
}
{
"attributes": [{
"name": "text-1580797977720",
"value": "Denver"
}, {
"name": "text-1580797977723",
"value": "colarado"
},
{
"name": "text-1580797977727",
"value": "USA"
}
]
}
我需要使用postgresql将上述json聚合到一个数组中,预期结果如下。我尝试使用json_agg,但这将在主数组中添加一个内部数组。可能有多个json,而不仅仅是2个
{
"attributes": [{
"name": "text-1580797977710",
"value": "Nikesh Niroula"
}, {
"name": "email-1580797979166",
"value": "nikesh@gmail.com"
}, {
"name": "text-1580797977720",
"value": "Denver"
}, {
"name": "text-1580797977723",
"value": "colarado"
},
{
"name": "text-1580797977727",
"value": "USA"
}
]
}
你可以用
串联运算符(|
)以及jsonb_数组_元素
jsonb_agg
可以解决您的问题
with t (id,
attr1,
attr2) as (
values (1,
'{
"attributes": [
{
"name": "one-1",
"value": "Nikesh Niroula"
}]}'::jsonb,
'{"attributes": [
{
"name": "one-2",
"value": "Nikesh Niroula"
}]}'::jsonb) ,
(1,
'{
"attributes": [
{
"name": "two-1",
"value": "Nikesh Niroula"
}]}'::jsonb,
'{"attributes": [
{
"name": "two-2",
"value": "Nikesh Niroula"
}]}'::jsonb) ,
(1,
'{
"attributes": [
{
"name": "three-1",
"value": "Nikesh Niroula"
}]}'::jsonb,
'{"attributes": [
{
"name": "three-2",
"value": "Nikesh Niroula"
}]}'::jsonb) ,
(2,
'{
"attributes": [
{
"name": "four-1",
"value": "Nikesh Niroula"
}]}'::jsonb,
'{"attributes": [
{
"name": "four-2",
"value": "Nikesh Niroula"
}]}'::jsonb) )
select
id ,
jsonb_agg(value)
from
t,
jsonb_array_elements(attr1->'attributes' ||(attr2->'attributes'))
group by
1;
你可以用
串联运算符(|
)以及jsonb_数组_元素
jsonb_agg
可以解决您的问题
with t (id,
attr1,
attr2) as (
values (1,
'{
"attributes": [
{
"name": "one-1",
"value": "Nikesh Niroula"
}]}'::jsonb,
'{"attributes": [
{
"name": "one-2",
"value": "Nikesh Niroula"
}]}'::jsonb) ,
(1,
'{
"attributes": [
{
"name": "two-1",
"value": "Nikesh Niroula"
}]}'::jsonb,
'{"attributes": [
{
"name": "two-2",
"value": "Nikesh Niroula"
}]}'::jsonb) ,
(1,
'{
"attributes": [
{
"name": "three-1",
"value": "Nikesh Niroula"
}]}'::jsonb,
'{"attributes": [
{
"name": "three-2",
"value": "Nikesh Niroula"
}]}'::jsonb) ,
(2,
'{
"attributes": [
{
"name": "four-1",
"value": "Nikesh Niroula"
}]}'::jsonb,
'{"attributes": [
{
"name": "four-2",
"value": "Nikesh Niroula"
}]}'::jsonb) )
select
id ,
jsonb_agg(value)
from
t,
jsonb_array_elements(attr1->'attributes' ||(attr2->'attributes'))
group by
1;
在将它们提供给agg函数之前,需要取消对它们的测试。如果表格为“j”,列为“x”,则:
在将它们提供给agg函数之前,需要取消对它们的测试。如果表格为“j”,列为“x”,则:
这应该适用于任意数量的行,还是仅适用于两个值?任意数量的行。这应该适用于任意数量的行,还是仅适用于两个值?任意数量的行。我将有未定义的行数-我的意思是不只是两行必须看到@jjanes的答案,使用
jsonb_数组_元素
。我将有未定义的行数-我的意思是不只是2行必须看到@jjanes的答案,使用jsonb_数组_元素
。