Postgresql Postgres:从JSON数组创建JSON对象并添加键
我需要用json数组中的键创建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** | *
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"} }