Форматирование Postgres row_to_json ответа на запрос

У меня есть следующий запрос Postgres:

"SELECT \"responses\".\"index\", \"responses\".\"created_at\",
ROUND(AVG(\"responses\".\"numeric\")) AS numeric
FROM \"responses\"
WHERE \"responses\".\"time\" = '#{time}'
GROUP BY \"responses\".\"index\", \"responses\".\"created_at\""

Я пытаюсь вывести ответ как JSON с помощью row_to_json, Я могу использовать:

"select row_to_json(row)
from (
  SELECT \"responses\".\"index\", \"responses\".\"created_at\",
  ROUND(AVG(\"responses\".\"numeric\")) AS numeric
  FROM \"responses\"
  WHERE \"responses\".\"time\" = '#{time}'
  GROUP BY \"responses\".\"index\", \"responses\".\"created_at\"
) row"

Который даст мне:

{"row_to_json"=>"{\"index\":1,\"created_at\":\"2014-07-12 03:51:00\",\"numeric\":3}"}

Однако я не хочу, чтобы ответ был вложен в row_to_json хэш. Есть ли простой способ удалить это, поэтому я просто вернусь:

"{\"index\":1,\"created_at\":\"2014-07-12 03:51:00\",\"numeric\":3}"

1 ответ

Вы должны использовать array_to_json а также array_agg функции.

Например:

SELECT array_to_json(array_agg(row_to_json(row))) FROM ...

Он вернет правильный массив JSON

Рекомендации:

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