2015-04-07 3 views
0

У меня есть таблицаPostgreSQL таблицу JSon

key | value 
-----+------- 
a | "foo" 
b | "bar" 

Как я могу получить результат

{"a": "foo", "b": "bar"} 

Он не работает с

select array_to_json(array_agg(t)) from table t; -- I get [{"key": "a", "value": "foo"}, {"key": "b", "value": "bar"}] 

Можете ли вы мне помочь?

+0

http://dba.stackexchange.com/questions/90482/export-postgres-table-as-json – svenhornberg

+1

@fuubah Не тот же вопрос. В этом вопросе данные таблицы должны были выводиться с именами столбцов. Здесь имена столбцов не имеют значения, но данные в таблице. –

+0

Возможно связано: http://stackoverflow.com/questions/20069143/postgres-inverse-of-json-each – dhke

ответ

1

PostgreSQL ≥ 9.4:

SELECT json_object(array_agg(key), array_agg(value)) 
FROM t;  

┌────────────────────────────┐ 
│  json_object   │ 
├────────────────────────────┤ 
│ {"a" : "foo", "b" : "bar"} │ 
└────────────────────────────┘ 
(1 row) 
1

Если вы используете PostgreSQL 9.4 вы можете использовать следующий код, чтобы взять ключ из одного столбца и значения от другого и создать единый объект JSON:

select json_object(array_agg(key), array_agg(value)) from table; 

Для более ранних версий я не знаю о простой метод в это время.

0

Для PostgreSQL 9.4+, есть aggregate function специально для этого:

SELECT json_object_agg(key, value) 
FROM t 

Это позволяет избежать затрат на создание 2 PostgreSQL массивов.

Для более старых версий PostgreSQL, вам нужно сцепить свой результат себя:

SELECT concat('{', string_agg(to_json(key) || ':' || to_json(value), ','), '}')::json 
FROM t 

Подробнее:

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