如何向 JSON 数组值添加键?
Posted
技术标签:
【中文标题】如何向 JSON 数组值添加键?【英文标题】:How to add a key to a JSON array value? 【发布时间】:2016-04-13 19:17:40 【问题描述】:我是 Postgres 的新手,使用的是 9.4 版。我有一个查询返回 json
列。
如何将 key 添加到 JSON 数组 value?
我的查询:
select array_to_json(array_agg(t))
from (select DISTINCT ON(city,state)latitudes,longitudes,city,state
from zips where city ilike 'ORL%'
order by city,state,ziptype desc
limit 10) t;
输出如下:
["latitudes": 31.22,"longitudes": -103.91,"city": "Orla","state": "TX", ...
但是,我想将其命名为:
["Locations": ["latitudes": 31.22,"longitudes": -103.91,"city": "Orla","state": "TX", ...
【问题讨论】:
json_build_object('Locations', array_to_json(array_agg(t)))
非常感谢您的工作
【参考方案1】:
与@Abelisto commented 一样,使用json_build_object()
(或jsonb_build_object()
)将密钥附加到您的值。
还有更简单的json_agg(t)
(或jsonb_agg(t)
)而不是array_to_json(array_agg(t))
:
SELECT json_build_object('Locations', json_agg(t))
FROM (
SELECT DISTINCT ON (city, state)
latitudes, longitudes, city, state
FROM zips
WHERE city ILIKE 'ORL%'
ORDER by city, state, ziptype DESC
LIMIT 10
) t;
【讨论】:
BTW PostgreSQL 9.4(Q标签中提到)似乎没有为jsonb
类型提供一些功能,不像9.5版本。
@Abelisto:是的,jsonb_agg()
是 Postgres 9.5 中的新功能。您可以在 pg 9.4 中替换为 json_agg(t)::jsonb
。无论哪种方式,呈现的查询都适用于 pg 9.4(OP 请求 json
,而不是 jsonb
)。以上是关于如何向 JSON 数组值添加键?的主要内容,如果未能解决你的问题,请参考以下文章
如何从嵌套 Json 数组角度 2 打印和分离键和值并将其添加到选择框中