2016-04-13 10 views
1

Я новичок в Postgres и использую версию 9.4. У меня есть запрос, возвращающий столбец json.
Как добавить ключ в массив JSON значение?Как добавить ключ к значению массива JSON?

Мой запрос:

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"}, ... 
+2

'json_build_object ('Местоположение', array_to_json (array_agg (т)))' – Abelisto

+0

спасибо, что работал – user1591668

ответ

2

Как @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; 
+0

КСТАТИ Похоже, что PostgreSQL 9.4 (упомянутый в тегах Q) не предоставляет некоторые функции для типа 'jsonb', в отличие от версии 9.5. – Abelisto

+0

@Abelisto: Да, 'jsonb_agg()' является новым в Postgres 9.5. Вы можете заменить на 'json_agg (t) :: jsonb' в pg 9.4. В любом случае представленный запрос работает для pg 9.4 (OP запросил 'json', а не' jsonb'). –

Смежные вопросы