Arrays 将多个Json数组转换为单个数组,而不是父数组中的数组

Arrays 将多个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"

我有以下两行Json

  {
            "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_数组_元素