Postgres конвертирует json с повторяющимися идентификаторами

При этом выберите:

json_agg(json_build_object("id", price::money))

Я получаю результирующее значение:

[
  {"6" : "$475.00"}, 
  {"6" : "$1,900.00"},
  {"3" : "$3,110.00"},
  {"3" : "$3,110.00"}
]

Вместо этого я хотел бы получить данные в этом формате:

{
  "6": ["$475.00","$1,900.00"],
  "3": ["$3,110.00","$3,110.00"]
}

При запросе на сервере или использовании с jsonb идентификаторы дублируются, и только одна из пар ключ-значение проходит.

Возможно, array_agg (цена :: деньги) исправляет это, но без примеров данных сложно сказать.

Raymond Nijland 01.06.2019 00:09
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
3
1
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны агрегировать цены в группы по идентификаторам и использовать функцию агрегирования json_object_agg(). Вы должны использовать производную таблицу (подзапрос в предложении from), потому что агрегаты не могут быть вложенными:

select json_object_agg(id, prices)
from (
    select id, json_agg(price::money) as prices
    from my_table
    group by id
    ) s

Рабочий пример в рекстестере.

Все заключено в массив: [{"6" : ["475,00$", "1900,00$"]}, {"3" : ["3110,00$", "3110,00$"]}], я бы хотел, чтобы это было просто объект: {"6" : ["475.00$", "1900.00$"], "3" : ["3110.00$", "3110.00$"]}

that_guy 01.06.2019 01:52

Я понял, что неправильно отформатировал свой вопрос, я отредактировал его, чтобы отразить этот комментарий. Извиняюсь!

that_guy 01.06.2019 01:55

Другие вопросы по теме