Postgres извлекает JSON, используя определенные столбцы - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть данные в Postgres (10.4) в виде

id | my_json
-----------------------------------
1  | {"a": 1, "b": 2, "c": [1,2,3]}
2  | {"a": 3, "b": 5, "c": [2,3,4]}

Я могу вывести данные в формате JSON следующим образом:

WITH l AS (SELECT id, my_json as data FROM table)
SELECT to_json(l) FROM l;

и я получаю:

{"id": 1, "data": {"a": 1, "b": 2, "c": [1,2,3]}}
{"id": 2, "data": {"a": 3, "b": 5, "c": [2,3,4]}}

Но есть ли способ вывести данные с помощью id?

Как это:

{"1": {"a": 1, "b": 2, "c": [1,2,3]}}
{"2": {"a": 3, "b": 5, "c": [2,3,4]}}

EDIT:

Ответ @Silvio Baez поставил меня на правильный путь, и я понял, что на самом деле это не совсем то, что мне нужно.

Я на самом деле хочу, чтобы результатом было слияние таких объектов, как:

{
 "1": {"a": 1, "b": 2, "c": [1,2,3]}, 
 "2": {"a": 3, "b": 5, "c": [2,3,4]}
}

И это достигается аналогичным образом с:

SELECT json_object_agg(id, data::json) FROM table;

1 Ответ

0 голосов
/ 04 сентября 2018

Может быть, вам нравится это решение. Он состоит из использования функции jsonb_build_object (VARIADIC "any") .

Пример

CREATE TEMPORARY TABLE json_table (
    id integer,
    my_json json
);

INSERT INTO json_table (id, my_json) VALUES
    (1, '{"a": 1, "b": 2, "c": [1,2,3]}'),
    (2, '{"a": 3, "b": 5, "c": [2,3,4]}');

SELECT json_build_object(id,my_json) FROM json_table;

Результат

{"1" : {"a": 1, "b": 2, "c": [1,2,3]}}
{"2" : {"a": 3, "b": 5, "c": [2,3,4]}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...