Postgresql Postgres:从JSON数组创建JSON对象并添加键

Postgresql Postgres:从JSON数组创建JSON对象并添加键,postgresql,Postgresql,我需要用json数组中的键创建json对象,键是数组json中的第一个元素。请检查下面的内容以了解清楚 customer :<br/> **id** | **email** | **app_id** <br/> 1 | rick@mail.com | abc <br/> milestone : <br/> **id** | **milestone_name** | *

我需要用json数组中的键创建json对象,键是数组json中的第一个元素。请检查下面的内容以了解清楚

customer :<br/>
    **id**    |  **email**          | **app_id** <br/>
    1         |  rick@mail.com      | abc  <br/>


milestone : <br/>
**id** | **milestone_name**    | **app_id** | **raised_at** <br/>
1  | PROFILE_COMPLETED | abc    | 2019-05-06 <br/>
2  | ADDRESS_COMPLETED | abc    | 2019-05-06  <br/>


select email,
 (
    select 
        array_to_json(
          array_agg(d)
        ) 
      from 
        (
          select 
            milestone_name, 
            raised_at, 
          from 
            milestone m 
          where 
            m.app_id = c.app_id
        ) d
    ) as milestones 
from customer c; 
上面的查询给出了输出:

我需要带键的json对象:


您没有提到您正在使用的版本,但这在最新版本中适用:

select email, 
      json_object_agg(
         milestone_name, json_build_object(
                            'milestone_name', milestone_name, 
                            'raised_at', raised_at
                         )
      )
FROM milestone
join customer on customer.app_id = milestone.app_id
GROUP BY email;

email           | rick@mail.com
json_object_agg | { "ADDRESS_COMPLETED" : {"milestone_name" : "ADDRESS_COMPLETED", "raised_at" : "2019-05-06"}, "PROFILE_COMPLETED" : {"milestone_name" : "PROFILE_COMPLETED", "raised_at" : "2019-05-06"} }
email      | rick@mail.com  <br/>
milestones | { "PROFILE_COMPLETED":{"milestone_name":"PROFILE_COMPLETED","raised_at":"2019-05-06"}, "ADDRESS_COMPLETED":{"milestone_name":"ADDRESS_COMPLETED","raised_at":"2019-05-06"}} 
select email, 
      json_object_agg(
         milestone_name, json_build_object(
                            'milestone_name', milestone_name, 
                            'raised_at', raised_at
                         )
      )
FROM milestone
join customer on customer.app_id = milestone.app_id
GROUP BY email;

email           | rick@mail.com
json_object_agg | { "ADDRESS_COMPLETED" : {"milestone_name" : "ADDRESS_COMPLETED", "raised_at" : "2019-05-06"}, "PROFILE_COMPLETED" : {"milestone_name" : "PROFILE_COMPLETED", "raised_at" : "2019-05-06"} }