2014-07-15 109 views
8

我有一个表像这样定义:创建列值JSON作为对象键

CREATE TABLE data_table AS (
    id bigserial, 
    "name" text NOT NULL, 
    "value" text NOT NULL, 
    CONSTRAINT data_table_pk PRIMARY KEY (id) 
); 

INSERT INTO data_table ("name", "value") VALUES 
('key_1', 'value_1'), 
('key_2', 'value_2'); 

我想获得从该表内容的JSON对象,这将是这样的:

{ 
    "key_1":"value_1", 
    "key_2":"value_2" 
} 

现在我正在使用客户端应用程序将结果集解析为JSON格式。是否有可能通过postgresl查询完成此操作?

回答

10

如果你在9.4,你可以做到以下几点:

$ select json_object_agg("name", "value") from data_table; 
      json_object_agg 
---------------------------------------------- 
{ "key_1" : "value_1", "key_2" : "value_2" } 
+0

看起来像这样真的应该包括在这个页面上: https://www.postgresql.org/docs/9.6/static/functions-json.html但相反,它们包括一个关于它在这个页面上的小提示: https://www.postgresql.org/docs/9.6/static/functions-aggregate.html – chrismarx

6
select 
    format(
     '{%s}', 
     string_agg(format(
      '%s:%s', 
      to_json("name"), 
      to_json("value") 
     ), ',') 
    )::json as json_object 
from data_table; 
      json_object    
--------------------------------------- 
{"key_1":"value_1","key_2":"value_2"} 
+0

我不得不改变' '%s的:%s''到'' “%S”:%s''亲自为此工作。但它的工作。谢谢! –