【问题标题】:How to add a key to a JSON array value?如何向 JSON 数组值添加键?
【发布时间】: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)))
  • 非常感谢您的工作

标签: json postgresql postgresql-9.3 postgresql-9.4


【解决方案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)。
猜你喜欢
  • 1970-01-01
  • 2017-08-04
  • 2020-11-09
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
相关资源
最近更新 更多