如何向 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 打印和分离键和值并将其添加到选择框中

在单个 JSON Patch 操作中向数组添加多个值?

检查 JSON 密钥是不是存在

js中如何向json数组添加元素

jquery怎样向json中的object添加键值对(元素)?

如何向 qjsonobject 中的键添加多个值