Postgres使用row_to_json嵌套JSON数组

Bho*_*omi 10 json postgresql-9.2

我试图使用2个表创建嵌套的json数组.

我有2个表日记和journaldetail.

架构是 -

期刊:journalid,totalamount

journaldetail:journaldetailid,journalidfk,account,amount

期刊与期刊之间的关系是一对多的.

我希望输出格式如下:

{  journalid : 1,
totalamount : 1000,
journaldetails : [ 
   {
      journaldetailid : j1,
      account : "abc",
      amount : 500 
   },
   {
      journaldetailid : j2,
      account : "def",
      amount : 500 
   }
]}
Run Code Online (Sandbox Code Playgroud)

但是,通过按照此帖子编写此查询,查询为:

select j.*, row_to_json(jd) as journal from journal j
inner join (
  select * from journaldetail
) jd on jd.sjournalidfk = j.sjournalid
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

{  journalid : 1,
totalamount : 1000,
journaldetails : 
   {
      journaldetailid : j1,
      account : "abc",
      amount : 500 
   }
}
{  journalid : 1,
totalamount : 1000,
journaldetails : 
   {
      journaldetailid : j2,
      account : "def",
      amount : 500 
   }
}
Run Code Online (Sandbox Code Playgroud)

我希望子表数据作为父表中的嵌套数组.

Bho*_*omi 18

我从这里找到答案:

这是查询:

select row_to_json(t)
from (
  select sjournalid,
    (
      select array_to_json(array_agg(row_to_json(jd)))
      from (
        select sjournaldetailid, saccountidfk
        from btjournaldetail
        where j.sjournalid = sjournalidfk        
      ) jd
    ) as journaldetail
  from btjournal j
) as t
Run Code Online (Sandbox Code Playgroud)

这给出了数组格式的输出.